~cairo-dock-team/ubuntu/oneiric/cairo-dock/2.3.0-3

« back to all changes in this revision

Viewing changes to src/cairo-dock-internal-accessibility.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthieu Baerts (matttbe)
  • Date: 2010-08-09 23:26:12 UTC
  • mto: This revision was merged to the branch mainline in revision 13.
  • Revision ID: james.westby@ubuntu.com-20100809232612-pocdxliaxjdetm37
Tags: upstream-2.2.0~0beta4
ImportĀ upstreamĀ versionĀ 2.2.0~0beta4

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**
2
 
* This file is a part of the Cairo-Dock project
3
 
*
4
 
* Copyright : (C) see the 'copyright' file.
5
 
* E-mail    : see the 'copyright' file.
6
 
*
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.
11
 
*
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/>.
18
 
*/
19
 
 
20
 
#include <string.h>
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"
34
 
 
35
 
CairoConfigAccessibility myAccessibility;
36
 
extern CairoDock *g_pMainDock;
37
 
 
38
 
static gboolean get_config (GKeyFile *pKeyFile, CairoConfigAccessibility *pAccessibility)
39
 
{
40
 
        gboolean bFlushConfFileNeeded = FALSE;
41
 
        
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;
45
 
        
46
 
        gchar *cShortkey = cairo_dock_get_string_key_value (pKeyFile, "Accessibility", "raise shortcut", &bFlushConfFileNeeded, NULL, "Position", NULL);
47
 
        
48
 
        if (iAccessibility == -1)  // option nouvelle.
49
 
        {
50
 
                pAccessibility->bReserveSpace = g_key_file_get_boolean (pKeyFile, "Accessibility", "reserve space", NULL);
51
 
                if (! pAccessibility->bReserveSpace)
52
 
                {
53
 
                        pAccessibility->bPopUp = g_key_file_get_boolean (pKeyFile, "Accessibility", "pop-up", NULL);
54
 
                        if (! pAccessibility->bPopUp)
55
 
                        {
56
 
                                pAccessibility->bAutoHide = g_key_file_get_boolean (pKeyFile, "Accessibility", "auto-hide", NULL);
57
 
                                if (! pAccessibility->bAutoHide)
58
 
                                {
59
 
                                        pAccessibility->bAutoHideOnMaximized = g_key_file_get_boolean (pKeyFile, "Accessibility", "auto quick hide on max", NULL);
60
 
                                        if (pAccessibility->bAutoHideOnMaximized)
61
 
                                                iAccessibility = 4;
62
 
                                        else if (cShortkey)
63
 
                                        {
64
 
                                                iAccessibility = 5;
65
 
                                                pAccessibility->cRaiseDockShortcut = cShortkey;
66
 
                                                cShortkey = NULL;
67
 
                                        }
68
 
                                }
69
 
                                else
70
 
                                        iAccessibility = 3;
71
 
                        }
72
 
                        else
73
 
                                iAccessibility = 2;
74
 
                }
75
 
                else
76
 
                        iAccessibility = 1;
77
 
                g_key_file_set_integer (pKeyFile, "Accessibility", "visibility", iAccessibility);
78
 
        }
79
 
        else
80
 
        {
81
 
                switch (iAccessibility)
82
 
                {
83
 
                        case 0 :
84
 
                        default :
85
 
                        break;
86
 
                        case 1:
87
 
                                pAccessibility->bReserveSpace = TRUE;
88
 
                        break;
89
 
                        case 2 :
90
 
                                pAccessibility->bPopUp = TRUE;
91
 
                        break;
92
 
                        case 3 :
93
 
                                pAccessibility->bAutoHide = TRUE;
94
 
                        break;
95
 
                        case 4 :
96
 
                                pAccessibility->bAutoHideOnMaximized = TRUE;
97
 
                        break;
98
 
                        case 5 :
99
 
                                pAccessibility->cRaiseDockShortcut = cShortkey;
100
 
                                cShortkey = NULL;
101
 
                        break;
102
 
                        
103
 
                }
104
 
        }
105
 
        g_free (cShortkey);
106
 
        
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);
110
 
        
111
 
        pAccessibility->bAutoHideOnFullScreen = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "auto quick hide", &bFlushConfFileNeeded, FALSE, "TaskBar", NULL);
112
 
        
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)
115
 
        {
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)
119
 
                {
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);
122
 
                }
123
 
                int iSize[2] = {pAccessibility->iVisibleZoneWidth, pAccessibility->iVisibleZoneHeight};
124
 
                g_key_file_set_integer_list (pKeyFile, "Accessibility", "zone size", iSize, 2);
125
 
        }
126
 
        if (pAccessibility->iVisibleZoneWidth < 50)
127
 
                pAccessibility->iVisibleZoneWidth = 50;
128
 
        if (pAccessibility->iVisibleZoneHeight == 0)
129
 
                pAccessibility->iVisibleZoneHeight = 2;
130
 
        
131
 
        pAccessibility->bPopUpOnScreenBorder = ! cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "pop in corner only", &bFlushConfFileNeeded, FALSE, "Position", NULL);
132
 
        
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);
137
 
        
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);
141
 
        
142
 
        return bFlushConfFileNeeded;
143
 
}
144
 
 
145
 
 
146
 
static void reset_config (CairoConfigAccessibility *pAccessibility)
147
 
{
148
 
        g_free (pAccessibility->cRaiseDockShortcut);
149
 
}
150
 
 
151
 
 
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)
156
 
 
157
 
static void reload (CairoConfigAccessibility *pPrevAccessibility, CairoConfigAccessibility *pAccessibility)
158
 
{
159
 
        CairoDock *pDock = g_pMainDock;
160
 
        
161
 
        //\_______________ Shortcut.
162
 
        if (pAccessibility->cRaiseDockShortcut != NULL)
163
 
        {
164
 
                if (pPrevAccessibility->cRaiseDockShortcut == NULL || strcmp (pAccessibility->cRaiseDockShortcut, pPrevAccessibility->cRaiseDockShortcut) != 0)
165
 
                {
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))
169
 
                        {
170
 
                                g_free (pAccessibility->cRaiseDockShortcut);
171
 
                                pAccessibility->cRaiseDockShortcut = NULL;
172
 
                        }
173
 
                }
174
 
        }
175
 
        else
176
 
        {
177
 
                if (pPrevAccessibility->cRaiseDockShortcut != NULL)
178
 
                {
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);
182
 
                }
183
 
        }
184
 
        if (pAccessibility->cRaiseDockShortcut != NULL)
185
 
        {
186
 
                pAccessibility->bReserveSpace = FALSE;
187
 
                pAccessibility->bPopUp = FALSE;
188
 
                pAccessibility->bAutoHide = FALSE;
189
 
        }
190
 
        
191
 
        //\_______________ Max Size.
192
 
        if (pAccessibility->iMaxAuthorizedWidth != pPrevAccessibility->iMaxAuthorizedWidth ||
193
 
                pAccessibility->bExtendedMode != pPrevAccessibility->bExtendedMode)
194
 
        {
195
 
                cairo_dock_set_all_views_to_default (1);  // 1 <=> tous les docks racines. met a jour la taille et reserve l'espace.
196
 
        }
197
 
        
198
 
        //\_______________ Zone de rappel.
199
 
        if (pAccessibility->iVisibleZoneWidth != pPrevAccessibility->iVisibleZoneWidth ||
200
 
                pAccessibility->iVisibleZoneHeight != pPrevAccessibility->iVisibleZoneHeight)
201
 
        {
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.
204
 
        }
205
 
        
206
 
        //\_______________ Reserve Spave.
207
 
        if (pAccessibility->bReserveSpace != pPrevAccessibility->bReserveSpace)
208
 
                cairo_dock_reserve_space_for_all_root_docks (pAccessibility->bReserveSpace);
209
 
        
210
 
        //\_______________ Pop-up.
211
 
        if (pAccessibility->bPopUp)
212
 
                cairo_dock_start_polling_screen_edge (pDock);
213
 
        else
214
 
                cairo_dock_stop_polling_screen_edge ();
215
 
        if (! pAccessibility->bPopUp && pPrevAccessibility->bPopUp)
216
 
        {
217
 
                cairo_dock_set_docks_on_top_layer (FALSE);  // FALSE <=> all docks.
218
 
        }
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.
221
 
        
222
 
        //\_______________ Auto-Hide
223
 
        if (pDock)
224
 
        {
225
 
                pDock->bAutoHide = pAccessibility->bAutoHide;
226
 
                if (! pAccessibility->bAutoHide && pPrevAccessibility->bAutoHide)
227
 
                {
228
 
                        cairo_dock_start_showing (pDock);
229
 
                }
230
 
                else if (pAccessibility->bAutoHide && ! pPrevAccessibility->bAutoHide)
231
 
                {
232
 
                        cairo_dock_start_hiding (pDock);
233
 
                }
234
 
                
235
 
                if (pAccessibility->bAutoHideOnFullScreen != pPrevAccessibility->bAutoHideOnFullScreen ||
236
 
                        pAccessibility->bAutoHideOnMaximized != pPrevAccessibility->bAutoHideOnMaximized)
237
 
                {
238
 
                        if ((!pAccessibility->bAutoHideOnMaximized && ! pAccessibility->bAutoHideOnFullScreen) || cairo_dock_search_window_on_our_way (pDock, pAccessibility->bAutoHideOnMaximized, pAccessibility->bAutoHideOnFullScreen) == NULL)
239
 
                        {
240
 
                                if (cairo_dock_quick_hide_is_activated () && !pDock->bAutoHide)
241
 
                                {
242
 
                                        cd_message (" => aucune fenetre n'est desormais genante");
243
 
                                        cairo_dock_deactivate_temporary_auto_hide ();
244
 
                                }
245
 
                        }
246
 
                        else
247
 
                        {
248
 
                                if (! cairo_dock_quick_hide_is_activated ())
249
 
                                {
250
 
                                        cd_message (" => une fenetre desormais genante");
251
 
                                        cairo_dock_activate_temporary_auto_hide ();
252
 
                                }
253
 
                        }
254
 
                }
255
 
        }
256
 
}
257
 
 
258
 
 
259
 
 
260
 
DEFINE_PRE_INIT (Accessibility)
261
 
{
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;
269
 
        
270
 
        pModule->reload = (CairoDockInternalModuleReloadFunc) reload;
271
 
        pModule->get_config = (CairoDockInternalModuleGetConfigFunc) get_config;
272
 
        pModule->reset_config = (CairoDockInternalModuleResetConfigFunc) reset_config;
273
 
        pModule->reset_data = NULL;
274
 
        
275
 
        pModule->pConfig = &myAccessibility;
276
 
        pModule->pData = NULL;
277
 
}