2
* This file is a part of the Cairo-Dock project
4
* Copyright : (C) see the 'copyright' file.
5
* E-mail : see the 'copyright' file.
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* as published by the Free Software Foundation; either version 3
10
* of the License, or (at your option) any later version.
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
21
#include "cairo-dock-modules.h"
22
#include "cairo-dock-config.h"
23
#include "cairo-dock-dock-manager.h"
24
#include "cairo-dock-dock-factory.h"
25
#include "cairo-dock-keybinder.h"
26
#include "cairo-dock-callbacks.h"
27
#include "cairo-dock-log.h"
28
#include "cairo-dock-dialogs.h"
29
#include "cairo-dock-animations.h"
30
#include "cairo-dock-applications-manager.h"
31
#define _INTERNAL_MODULE_
32
#include "cairo-dock-internal-accessibility.h"
33
#include "cairo-dock-dock-facility.h"
35
CairoConfigAccessibility myAccessibility;
36
extern CairoDock *g_pMainDock;
38
static gboolean get_config (GKeyFile *pKeyFile, CairoConfigAccessibility *pAccessibility)
40
gboolean bFlushConfFileNeeded = FALSE;
42
//\____________________ Visibilite
43
int iAccessibility = cairo_dock_get_integer_key_value (pKeyFile, "Accessibility", "visibility", &bFlushConfFileNeeded, -1, NULL, NULL); // -1 pour pouvoir intercepter le cas ou la cle n'existe pas.
44
gboolean bRaiseOnShortcut = FALSE;
46
gchar *cShortkey = cairo_dock_get_string_key_value (pKeyFile, "Accessibility", "raise shortcut", &bFlushConfFileNeeded, NULL, "Position", NULL);
48
if (iAccessibility == -1) // option nouvelle.
50
pAccessibility->bReserveSpace = g_key_file_get_boolean (pKeyFile, "Accessibility", "reserve space", NULL);
51
if (! pAccessibility->bReserveSpace)
53
pAccessibility->bPopUp = g_key_file_get_boolean (pKeyFile, "Accessibility", "pop-up", NULL);
54
if (! pAccessibility->bPopUp)
56
pAccessibility->bAutoHide = g_key_file_get_boolean (pKeyFile, "Accessibility", "auto-hide", NULL);
57
if (! pAccessibility->bAutoHide)
59
pAccessibility->bAutoHideOnMaximized = g_key_file_get_boolean (pKeyFile, "Accessibility", "auto quick hide on max", NULL);
60
if (pAccessibility->bAutoHideOnMaximized)
65
pAccessibility->cRaiseDockShortcut = cShortkey;
77
g_key_file_set_integer (pKeyFile, "Accessibility", "visibility", iAccessibility);
81
switch (iAccessibility)
87
pAccessibility->bReserveSpace = TRUE;
90
pAccessibility->bPopUp = TRUE;
93
pAccessibility->bAutoHide = TRUE;
96
pAccessibility->bAutoHideOnMaximized = TRUE;
99
pAccessibility->cRaiseDockShortcut = cShortkey;
107
//\____________________ Autres parametres.
108
pAccessibility->iMaxAuthorizedWidth = cairo_dock_get_integer_key_value (pKeyFile, "Accessibility", "max_authorized_width", &bFlushConfFileNeeded, 0, "Position", NULL); // obsolete, cache en conf.
109
pAccessibility->bExtendedMode = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "extended", &bFlushConfFileNeeded, FALSE, NULL, NULL);
111
pAccessibility->bAutoHideOnFullScreen = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "auto quick hide", &bFlushConfFileNeeded, FALSE, "TaskBar", NULL);
113
cairo_dock_get_size_key_value (pKeyFile, "Accessibility", "zone size", &bFlushConfFileNeeded, 0, "Hidden dock", "zone size", &pAccessibility->iVisibleZoneWidth, &pAccessibility->iVisibleZoneHeight);
114
if (pAccessibility->iVisibleZoneWidth == 0)
116
pAccessibility->iVisibleZoneWidth = g_key_file_get_integer (pKeyFile, "Hidden dock", "zone width", NULL);
117
pAccessibility->iVisibleZoneHeight = g_key_file_get_integer (pKeyFile, "Hidden dock", "zone height", NULL);
118
if (pAccessibility->iVisibleZoneWidth == 0)
120
pAccessibility->iVisibleZoneWidth = g_key_file_get_integer (pKeyFile, "Background", "zone width", NULL);
121
pAccessibility->iVisibleZoneHeight = g_key_file_get_integer (pKeyFile, "Background", "zone height", NULL);
123
int iSize[2] = {pAccessibility->iVisibleZoneWidth, pAccessibility->iVisibleZoneHeight};
124
g_key_file_set_integer_list (pKeyFile, "Accessibility", "zone size", iSize, 2);
126
if (pAccessibility->iVisibleZoneWidth < 50)
127
pAccessibility->iVisibleZoneWidth = 50;
128
if (pAccessibility->iVisibleZoneHeight == 0)
129
pAccessibility->iVisibleZoneHeight = 2;
131
pAccessibility->bPopUpOnScreenBorder = ! cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "pop in corner only", &bFlushConfFileNeeded, FALSE, "Position", NULL);
133
//\____________________ sous-docks.
134
pAccessibility->iLeaveSubDockDelay = cairo_dock_get_integer_key_value (pKeyFile, "Accessibility", "leaving delay", &bFlushConfFileNeeded, 330, "System", NULL);
135
pAccessibility->iShowSubDockDelay = cairo_dock_get_integer_key_value (pKeyFile, "Accessibility", "show delay", &bFlushConfFileNeeded, 300, "System", NULL);
136
pAccessibility->bShowSubDockOnClick = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "show on click", &bFlushConfFileNeeded, FALSE, "System", NULL);
138
//\____________________ lock
139
pAccessibility->bLockAll = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "lock all", &bFlushConfFileNeeded, FALSE, NULL, NULL);
140
pAccessibility->bLockIcons = pAccessibility->bLockAll || cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "lock icons", &bFlushConfFileNeeded, FALSE, NULL, NULL);
142
return bFlushConfFileNeeded;
146
static void reset_config (CairoConfigAccessibility *pAccessibility)
148
g_free (pAccessibility->cRaiseDockShortcut);
152
#define _bind_key(cShortcut) \
153
do { if (! cd_keybinder_bind (cShortcut, (CDBindkeyHandler) cairo_dock_raise_from_keyboard, NULL)) { \
154
g_free (cShortcut); \
155
cShortcut = NULL; } } while (0)
157
static void reload (CairoConfigAccessibility *pPrevAccessibility, CairoConfigAccessibility *pAccessibility)
159
CairoDock *pDock = g_pMainDock;
161
//\_______________ Shortcut.
162
if (pAccessibility->cRaiseDockShortcut != NULL)
164
if (pPrevAccessibility->cRaiseDockShortcut == NULL || strcmp (pAccessibility->cRaiseDockShortcut, pPrevAccessibility->cRaiseDockShortcut) != 0)
166
if (pPrevAccessibility->cRaiseDockShortcut != NULL)
167
cd_keybinder_unbind (pPrevAccessibility->cRaiseDockShortcut, (CDBindkeyHandler) cairo_dock_raise_from_keyboard);
168
if (! cd_keybinder_bind (pAccessibility->cRaiseDockShortcut, (CDBindkeyHandler) cairo_dock_raise_from_keyboard, NULL))
170
g_free (pAccessibility->cRaiseDockShortcut);
171
pAccessibility->cRaiseDockShortcut = NULL;
177
if (pPrevAccessibility->cRaiseDockShortcut != NULL)
179
cd_keybinder_unbind (pPrevAccessibility->cRaiseDockShortcut, (CDBindkeyHandler) cairo_dock_raise_from_keyboard);
180
cairo_dock_place_root_dock (pDock);
181
gtk_widget_show (pDock->container.pWidget);
184
if (pAccessibility->cRaiseDockShortcut != NULL)
186
pAccessibility->bReserveSpace = FALSE;
187
pAccessibility->bPopUp = FALSE;
188
pAccessibility->bAutoHide = FALSE;
191
//\_______________ Max Size.
192
if (pAccessibility->iMaxAuthorizedWidth != pPrevAccessibility->iMaxAuthorizedWidth ||
193
pAccessibility->bExtendedMode != pPrevAccessibility->bExtendedMode)
195
cairo_dock_set_all_views_to_default (1); // 1 <=> tous les docks racines. met a jour la taille et reserve l'espace.
198
//\_______________ Zone de rappel.
199
if (pAccessibility->iVisibleZoneWidth != pPrevAccessibility->iVisibleZoneWidth ||
200
pAccessibility->iVisibleZoneHeight != pPrevAccessibility->iVisibleZoneHeight)
202
// on replace tous les docks racines (c'est bourrin, on pourrait juste le faire pour ceux qui ont l'auto-hide).
203
cairo_dock_reposition_root_docks (FALSE); // FALSE <=> main dock inclus.
206
//\_______________ Reserve Spave.
207
if (pAccessibility->bReserveSpace != pPrevAccessibility->bReserveSpace)
208
cairo_dock_reserve_space_for_all_root_docks (pAccessibility->bReserveSpace);
210
//\_______________ Pop-up.
211
if (pAccessibility->bPopUp)
212
cairo_dock_start_polling_screen_edge (pDock);
214
cairo_dock_stop_polling_screen_edge ();
215
if (! pAccessibility->bPopUp && pPrevAccessibility->bPopUp)
217
cairo_dock_set_docks_on_top_layer (FALSE); // FALSE <=> all docks.
219
else if (pAccessibility->bPopUp && ! pPrevAccessibility->bPopUp)
220
gtk_window_set_keep_below (GTK_WINDOW (pDock->container.pWidget), TRUE); // le main dock ayant ete cree avant, il n'a pas herite de ce parametre.
222
//\_______________ Auto-Hide
225
pDock->bAutoHide = pAccessibility->bAutoHide;
226
if (! pAccessibility->bAutoHide && pPrevAccessibility->bAutoHide)
228
cairo_dock_start_showing (pDock);
230
else if (pAccessibility->bAutoHide && ! pPrevAccessibility->bAutoHide)
232
cairo_dock_start_hiding (pDock);
235
if (pAccessibility->bAutoHideOnFullScreen != pPrevAccessibility->bAutoHideOnFullScreen ||
236
pAccessibility->bAutoHideOnMaximized != pPrevAccessibility->bAutoHideOnMaximized)
238
if ((!pAccessibility->bAutoHideOnMaximized && ! pAccessibility->bAutoHideOnFullScreen) || cairo_dock_search_window_on_our_way (pDock, pAccessibility->bAutoHideOnMaximized, pAccessibility->bAutoHideOnFullScreen) == NULL)
240
if (cairo_dock_quick_hide_is_activated () && !pDock->bAutoHide)
242
cd_message (" => aucune fenetre n'est desormais genante");
243
cairo_dock_deactivate_temporary_auto_hide ();
248
if (! cairo_dock_quick_hide_is_activated ())
250
cd_message (" => une fenetre desormais genante");
251
cairo_dock_activate_temporary_auto_hide ();
260
DEFINE_PRE_INIT (Accessibility)
262
pModule->cModuleName = "Accessibility";
263
pModule->cTitle = N_("Visibility");
264
pModule->cIcon = "icon-visibility.png";
265
pModule->cDescription = N_("Do you like your dock to be always visible,\n or on the contrary unobstrusive ?\nConfigure the way you access to your docks and sub-docks !"); // How do you access to your docks ?
266
pModule->iCategory = CAIRO_DOCK_CATEGORY_SYSTEM;
267
pModule->iSizeOfConfig = sizeof (CairoConfigAccessibility);
268
pModule->iSizeOfData = 0;
270
pModule->reload = (CairoDockInternalModuleReloadFunc) reload;
271
pModule->get_config = (CairoDockInternalModuleGetConfigFunc) get_config;
272
pModule->reset_config = (CairoDockInternalModuleResetConfigFunc) reset_config;
273
pModule->reset_data = NULL;
275
pModule->pConfig = &myAccessibility;
276
pModule->pData = NULL;