e16/src/mod-misc.c

252 lines
7.6 KiB
C

/*
* Copyright (C) 2003-2022 Kim Woelders
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies of the Software, its documentation and marketing & publicity
* materials, and acknowledgment shall be given in the documentation, materials
* and software packages that this Software was used.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "E.h"
#include "dialog.h"
#include "eimage.h"
#include "emodule.h"
#include "settings.h"
#include "snaps.h"
/***********************************************************************
* *** should all go elsewhere ***
**********************************************************************/
/* Use static module list for now */
extern const EModule ModAclass;
extern const EModule ModBackgrounds;
extern const EModule ModButtons;
#if USE_COMPOSITE
extern const EModule ModCompMgr;
extern const EModule ModMagwin;
#endif
#if USE_GLX
extern const EModule ModGlwin;
#endif
extern const EModule ModCursors;
extern const EModule ModDesktops;
extern const EModule ModEffects;
extern const EModule ModEwins;
extern const EModule ModFocus;
extern const EModule ModGroups;
extern const EModule ModImageclass;
extern const EModule ModIconboxes;
extern const EModule ModLocale;
extern const EModule ModMenus;
extern const EModule ModMisc;
extern const EModule ModPagers;
extern const EModule ModSlideouts;
#if ENABLE_SOUND
extern const EModule ModSound;
#endif
extern const EModule ModTextclass;
extern const EModule ModTheme;
extern const EModule ModTooltips;
extern const EModule ModWarplist;
extern const EModule ModWindowMatch;
const EModule *const p_modules[] = {
&ModAclass,
&ModBackgrounds,
&ModButtons,
#if USE_COMPOSITE
&ModCompMgr,
&ModMagwin,
#endif
&ModCursors,
&ModDesktops,
&ModEwins,
&ModEffects,
&ModFocus,
#if USE_GLX
&ModGlwin,
#endif
&ModGroups,
&ModIconboxes,
&ModImageclass,
&ModLocale,
&ModMenus,
&ModMisc,
&ModPagers,
&ModSlideouts,
#if ENABLE_SOUND
&ModSound,
#endif
&ModTextclass,
&ModTheme,
&ModTooltips,
&ModWarplist,
&ModWindowMatch,
};
int n_modules = E_ARRAY_SIZE(p_modules);
#if 0
static void
MiscSighan(int sig, void *prm __UNUSED__)
{
switch (sig)
{
case ESIGNAL_START:
break;
}
}
#endif
static void
_CfgImageCacheSize(void *item __UNUSED__, const char *value)
{
if (!value || !value[0])
return;
EImageSetCacheSize(atoi(value));
}
static void
_CfgXImageCacheCount(void *item __UNUSED__, const char *value)
{
if (!value || !value[0])
return;
EImageSetXImageCacheSize(atoi(value), -1);
}
static const CfgItem MiscCfgItems[] = {
CFG_ITEM_INT(Conf, animation.step, 10),
CFG_ITEM_INT(Conf, buttons.move_resistance, 10),
CFG_ITEM_BOOL(Conf, dialogs.headers, 0),
CFG_ITEM_BOOL(Conf, dialogs.button_image, 0),
CFG_ITEM_BOOL(Conf, dock.enable, 1),
CFG_ITEM_BOOL(Conf, dock.sticky, 1),
CFG_ITEM_INT(Conf, dock.dirmode, DOCK_DOWN),
CFG_ITEM_INT(Conf, dock.startx, 0),
CFG_ITEM_INT(Conf, dock.starty, 0),
CFG_ITEM_BOOL(Conf, hints.set_xroot_info_on_root_window, 0),
CFG_ITEM_BOOL(Conf, log.difftime, 0),
CFG_ITEM_BOOL(Conf, log.dest, 0),
CFG_ITEM_INT(Conf, magwin.zoom_res, 4),
CFG_ITEM_INT(Conf, movres.mode_move, MR_OPAQUE),
CFG_ITEM_INT(Conf, movres.mode_resize, MR_BOX),
CFG_ITEM_INT(Conf, movres.mode_info, 1),
CFG_ITEM_INT(Conf, movres.mode_maximize_default, 1),
CFG_ITEM_HEX(Conf, movres.color, 0x00ff0000),
CFG_ITEM_BOOL(Conf, movres.avoid_server_grab, 1),
CFG_ITEM_BOOL(Conf, movres.update_while_moving, 0),
CFG_ITEM_BOOL(Conf, movres.enable_sync_request, 0),
CFG_ITEM_BOOL(Conf, movres.dragbar_nocover, 0),
CFG_ITEM_BOOL(Conf, movres.enable_smart_max_hv, 0),
CFG_ITEM_BOOL(Conf, movres.maximize_animate, 0),
CFG_ITEM_INT(Conf, movres.maximize_speed, 6000),
CFG_ITEM_INT(Conf, opacity.menus, 85),
CFG_ITEM_INT(Conf, opacity.movres, 60),
CFG_ITEM_INT(Conf, opacity.tooltips, 80),
CFG_ITEM_INT(Conf, opacity.focused, 100),
CFG_ITEM_INT(Conf, opacity.unfocused, 100),
CFG_ITEM_BOOL(Conf, place.manual, 0),
CFG_ITEM_BOOL(Conf, place.manual_mouse_pointer, 0),
CFG_ITEM_BOOL(Conf, place.center_if_desk_full, 0),
CFG_ITEM_BOOL(Conf, place.ignore_struts, 0),
CFG_ITEM_BOOL(Conf, place.ignore_struts_fullscreen, 0),
CFG_ITEM_BOOL(Conf, place.ignore_struts_maximize, 0),
CFG_ITEM_INT(Conf, place.screen_struts.left, 0),
CFG_ITEM_INT(Conf, place.screen_struts.right, 0),
CFG_ITEM_INT(Conf, place.screen_struts.top, 0),
CFG_ITEM_INT(Conf, place.screen_struts.bottom, 0),
CFG_ITEM_BOOL(Conf, place.raise_fullscreen, 0),
CFG_ITEM_BOOL(Conf, place.slidein, 0),
CFG_ITEM_BOOL(Conf, place.cleanupslide, 1),
CFG_ITEM_INT(Conf, place.slidemode, 0),
CFG_ITEM_INT(Conf, place.slidespeedmap, 6000),
CFG_ITEM_INT(Conf, place.slidespeedcleanup, 8000),
CFG_ITEM_BOOL(Conf, session.enable_script, 0),
CFG_ITEM_STR(Conf, session.script),
CFG_ITEM_BOOL(Conf, session.enable_logout_dialog, 1),
CFG_ITEM_BOOL(Conf, session.enable_reboot_halt, 0),
CFG_ITEM_STR(Conf, session.cmd_reboot),
CFG_ITEM_STR(Conf, session.cmd_halt),
CFG_ITEM_STR(Conf, session.cmd_lock),
CFG_ITEM_STR(Conf, session.cmd_suspend),
CFG_ITEM_STR(Conf, session.cmd_hibernate),
CFG_ITEM_BOOL(Conf, shading.animate, 1),
CFG_ITEM_INT(Conf, shading.speed, 8000),
CFG_ITEM_BOOL(Conf, snap.enable, 1),
CFG_ITEM_INT(Conf, snap.edge_snap_dist, 8),
CFG_ITEM_INT(Conf, snap.screen_snap_dist, 32),
CFG_ITEM_BOOL(Conf, startup.firsttime, 1),
CFG_ITEM_BOOL(Conf, startup.animate, 1),
CFG_ITEM_BOOL(Conf, testing.argb_internal_objects, 0),
CFG_ITEM_BOOL(Conf, testing.argb_internal_clients, 0),
CFG_ITEM_BOOL(Conf, testing.argb_clients, 0),
CFG_ITEM_BOOL(Conf, testing.argb_clients_inherit_attr, 0),
CFG_FUNC_INT(Conf, testing.image_cache_size, -1, _CfgImageCacheSize),
CFG_FUNC_INT(Conf, testing.ximage_cache_count, -1, _CfgXImageCacheCount),
CFG_ITEM_INT(Conf, testing.mask_alpha_threshold, 8),
CFG_ITEM_BOOL(Conf, testing.enable_startup_id, 1),
CFG_ITEM_BOOL(Conf, testing.use_render_for_scaling, 0),
CFG_ITEM_BOOL(Conf, testing.bindings_reload, 1),
CFG_ITEM_HEX(Conf, testing.no_sync_mask, 0),
CFG_ITEM_BOOL(Conf, autosave, 1),
CFG_ITEM_BOOL(Conf, memory_paranoia, 1),
CFG_ITEM_BOOL(Conf, save_under, 0),
};
/* Stuff not elsewhere */
const EModule ModMisc = {
"misc", NULL,
NULL,
{ 0, NULL },
MOD_ITEMS(MiscCfgItems)
};
void
autosave(void)
{
if (!Mode.wm.save_ok)
return;
if (EDebug(EDBUG_TYPE_SESSION))
Eprintf("%s\n", __func__);
SnapshotsSaveReal();
/* Save the configuration parameters */
ConfigurationSave();
}