~ubuntu-branches/ubuntu/oneiric/cairo-dock/oneiric-201110111206

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne, Matthieu Baerts (matttbe), Julien Lavergne
  • Date: 2009-10-04 16:33:52 UTC
  • mfrom: (1.1.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20091004163352-ttbbjfmpb8uzl8j4
Tags: 2.0.9-0ubuntu1
[ Matthieu Baerts (matttbe) ]
* New Upstream Version. (LP: #435587)
* Added apport hook in debian/apport
 - Add debian/apport
 - debian/cairo-dock-core.install: Added debian/apport/cairo-dock.py
* Use .desktop provided by upstream
 - Removed debian/*.desktop
 - debian/cairo-dock-core.install: install upstream desktop files. 

[ Julien Lavergne ]
* Adjust debian/changelog with Daniel Holbach suggestions.
* debian/patches/01_rename_cairo-dock-package-theme.patch: drop, 
  merged upstream.
* debian/patches/01-desktop-file-category.patch:
 - Remove Encoding field and set category to Utility.
* debian/patches/02-merge-changelog.patch:
 - Merge ChangeLog and ChangeLog-2.0.9.
* debian/apport: Remove commands with grep, python doesn't like it.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/**
2
 
* Internal accessibility for Cairo-Dock
 
2
* This file is a part of the Cairo-Dock project
3
3
*
4
 
* Copyright : (C) 2009 by Fabrice Rey
5
 
* E-mail    : fabounet@users.berlios.de
 
4
* Copyright : (C) see the 'copyright' file.
 
5
* E-mail    : see the 'copyright' file.
6
6
*
7
7
* This program is free software; you can redistribute it and/or
8
8
* modify it under the terms of the GNU General Public License
13
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
15
* GNU General Public License for more details.
16
 
*   http://www.gnu.org/licenses/licenses.html#GPL
 
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/>.
17
18
*/
18
19
 
19
20
#include <string.h>
25
26
#include "cairo-dock-callbacks.h"
26
27
#include "cairo-dock-log.h"
27
28
#include "cairo-dock-dialogs.h"
 
29
#include "cairo-dock-applications-manager.h"
28
30
#define _INTERNAL_MODULE_
29
31
#include "cairo-dock-internal-accessibility.h"
30
32
#include "cairo-dock-dock-facility.h"
32
34
 
33
35
CairoConfigAccessibility myAccessibility;
34
36
extern CairoDock *g_pMainDock;
35
 
extern gint g_iScreenWidth[2];
36
37
 
37
38
#define _append_warning(w) do {\
38
39
        if (sWarning == NULL)\
46
47
{
47
48
        gboolean bFlushConfFileNeeded = FALSE;
48
49
        
 
50
        // espace du dock.
49
51
        pAccessibility->bReserveSpace = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "reserve space", &bFlushConfFileNeeded, FALSE, "Position", NULL);
50
52
 
 
53
        pAccessibility->iMaxAuthorizedWidth = cairo_dock_get_integer_key_value (pKeyFile, "Accessibility", "max autorized width", &bFlushConfFileNeeded, 0, "Position", NULL);
 
54
        pAccessibility->bExtendedMode = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "extended", &bFlushConfFileNeeded, FALSE, NULL, NULL);
 
55
        
 
56
        // auto-hide
51
57
        pAccessibility->bAutoHide = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "auto-hide", &bFlushConfFileNeeded, FALSE, "Position", "auto-hide");
52
 
        
 
58
        pAccessibility->bAutoHideOnFullScreen = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "auto quick hide", &bFlushConfFileNeeded, FALSE, "TaskBar", NULL);
 
59
        pAccessibility->bAutoHideOnMaximized = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "auto quick hide on max", &bFlushConfFileNeeded, FALSE, "TaskBar", NULL);
 
60
        
 
61
        cairo_dock_get_size_key_value (pKeyFile, "Accessibility", "zone size", &bFlushConfFileNeeded, 0, "Hidden dock", "zone size", &pAccessibility->iVisibleZoneWidth, &pAccessibility->iVisibleZoneHeight);
 
62
        if (pAccessibility->iVisibleZoneWidth == 0)
 
63
        {
 
64
                pAccessibility->iVisibleZoneWidth = g_key_file_get_integer (pKeyFile, "Hidden dock", "zone width", NULL);
 
65
                pAccessibility->iVisibleZoneHeight = g_key_file_get_integer (pKeyFile, "Hidden dock", "zone height", NULL);
 
66
                if (pAccessibility->iVisibleZoneWidth == 0)
 
67
                {
 
68
                        pAccessibility->iVisibleZoneWidth = g_key_file_get_integer (pKeyFile, "Background", "zone width", NULL);
 
69
                        pAccessibility->iVisibleZoneHeight = g_key_file_get_integer (pKeyFile, "Background", "zone height", NULL);
 
70
                }
 
71
                int iSize[2] = {pAccessibility->iVisibleZoneWidth, pAccessibility->iVisibleZoneHeight};
 
72
                g_key_file_set_integer_list (pKeyFile, "Accessibility", "zone size", iSize, 2);
 
73
        }
 
74
        if (pAccessibility->iVisibleZoneWidth < 20)
 
75
                pAccessibility->iVisibleZoneWidth = 20;
 
76
        if (pAccessibility->iVisibleZoneHeight == 0)
 
77
                pAccessibility->iVisibleZoneHeight = 2;
 
78
        
 
79
        // pop-up
53
80
        pAccessibility->bPopUp = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "pop-up", &bFlushConfFileNeeded, FALSE, "Position", NULL);
54
81
        pAccessibility->bPopUpOnScreenBorder = ! cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "pop in corner only", &bFlushConfFileNeeded, FALSE, "Position", NULL);
55
82
        
56
 
        pAccessibility->iMaxAuthorizedWidth = cairo_dock_get_integer_key_value (pKeyFile, "Accessibility", "max autorized width", &bFlushConfFileNeeded, 0, "Position", NULL);
57
 
        
 
83
        // shortcut
58
84
        pAccessibility->cRaiseDockShortcut = cairo_dock_get_string_key_value (pKeyFile, "Accessibility", "raise shortcut", &bFlushConfFileNeeded, NULL, "Position", NULL);
59
85
        
 
86
        // sous-docks.
60
87
        pAccessibility->iLeaveSubDockDelay = cairo_dock_get_integer_key_value (pKeyFile, "Accessibility", "leaving delay", &bFlushConfFileNeeded, 330, "System", NULL);
61
88
        pAccessibility->iShowSubDockDelay = cairo_dock_get_integer_key_value (pKeyFile, "Accessibility", "show delay", &bFlushConfFileNeeded, 300, "System", NULL);
62
89
        pAccessibility->bShowSubDockOnClick = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "show on click", &bFlushConfFileNeeded, FALSE, "System", NULL);
63
 
        pAccessibility->bLockIcons = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "lock icons", &bFlushConfFileNeeded, FALSE, NULL, NULL);
64
 
        
 
90
        
 
91
        // lock
 
92
        pAccessibility->bLockAll = cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "lock all", &bFlushConfFileNeeded, FALSE, NULL, NULL);
 
93
        pAccessibility->bLockIcons = pAccessibility->bLockAll || cairo_dock_get_boolean_key_value (pKeyFile, "Accessibility", "lock icons", &bFlushConfFileNeeded, FALSE, NULL, NULL);
 
94
        
 
95
        // on verifie les options en conflit.
65
96
        GString *sWarning = NULL;
66
97
        if (pAccessibility->cRaiseDockShortcut != NULL)
67
98
        {
68
99
                if (pAccessibility->bPopUp)
69
100
                {
70
 
                        _append_warning ("The option 'keep the dock below' is in conflict with the 'raise on shortcuts' option, it will be ignored");
 
101
                        _append_warning ("The option 'keep the dock below' is in conflict with the 'raise on shortcuts' option,\n it will be ignored");
71
102
                        pAccessibility->bPopUp = FALSE;
72
103
                }
73
104
                if (pAccessibility->bReserveSpace)
74
105
                {
75
 
                        _append_warning ("The option 'reserve space' is in conflict with the 'raise on shortcuts' option, it will be ignored");
 
106
                        _append_warning ("The option 'reserve space' is in conflict with the 'raise on shortcuts' option,\n it will be ignored");
76
107
                        pAccessibility->bReserveSpace = FALSE;
77
108
                }
78
109
                if (pAccessibility->bAutoHide)
79
110
                {
80
 
                        _append_warning ("The option 'auto-hide' is in conflict with the 'raise on shortcuts' option, it will be ignored");
 
111
                        _append_warning ("The option 'auto-hide' is in conflict with the 'raise on shortcuts' option,\n it will be ignored");
81
112
                        pAccessibility->bAutoHide = FALSE;
82
113
                }
 
114
                if (pAccessibility->bAutoHideOnFullScreen)
 
115
                {
 
116
                        _append_warning ("The option 'auto-hide on fullscreen window' is in conflict with the 'raise on shortcuts' option,\n it will be ignored");
 
117
                        pAccessibility->bAutoHideOnFullScreen = FALSE;
 
118
                }
 
119
                if (pAccessibility->bAutoHideOnMaximized)
 
120
                {
 
121
                        _append_warning ("The option 'auto-hide on maximized window' is in conflict with the 'raise on shortcuts' option,\n it will be ignored");
 
122
                        pAccessibility->bAutoHideOnMaximized = FALSE;
 
123
                }
83
124
        }
84
125
        
85
126
        if (pAccessibility->bPopUp)
86
127
        {
87
128
                if (pAccessibility->bReserveSpace)
88
129
                {
89
 
                        _append_warning ("The option 'reserve space for dock' is in conflict with the 'keep the dock below' option, it will be ignored");
 
130
                        _append_warning ("The option 'reserve space for dock' is in conflict with the 'keep the dock below' option,\n it will be ignored");
90
131
                        pAccessibility->bReserveSpace = FALSE;
91
132
                }
92
133
                if (pAccessibility->bAutoHide)
93
134
                {
94
 
                        _append_warning ("The option 'auto-hide' is in conflict with the 'keep the dock below' option, it will be ignored");
 
135
                        _append_warning ("The option 'auto-hide' is in conflict with the 'keep the dock below' option,\n it will be ignored");
95
136
                        pAccessibility->bAutoHide = FALSE;
96
137
                }
 
138
                if (pAccessibility->bAutoHideOnFullScreen)
 
139
                {
 
140
                        _append_warning ("The option 'auto-hide on fullscreen window' is in conflict with the 'keep the dock below' option,\n it will be ignored");
 
141
                        pAccessibility->bAutoHideOnFullScreen = FALSE;
 
142
                }
 
143
                if (pAccessibility->bAutoHideOnMaximized)
 
144
                {
 
145
                        _append_warning ("The option 'auto-hide on maximized window' is in conflict with the 'keep the dock below' option,\n it will be ignored");
 
146
                        pAccessibility->bAutoHideOnMaximized = FALSE;
 
147
                }
 
148
        }  // par contre on peut avoir reserve space avec auto-hide.
 
149
        
 
150
        if (pAccessibility->bReserveSpace)
 
151
        {
 
152
                if (pAccessibility->bAutoHideOnFullScreen)
 
153
                {
 
154
                        cd_warning ("The option 'auto-hide on fullscreen window' is in conflict with the option 'reserve space for dock',\n it will be ignored");
 
155
                        pAccessibility->bAutoHideOnFullScreen = FALSE;
 
156
                }
 
157
                if (pAccessibility->bAutoHideOnMaximized)
 
158
                {
 
159
                        cd_warning ("The option 'auto-hide on maximized window' is in conflict with the option 'reserve space for dock',\n it will be ignored");
 
160
                        pAccessibility->bAutoHideOnMaximized = FALSE;
 
161
                }
97
162
        }
98
163
        
 
164
        /// faire aussi l'auto-hide sur fenetres maximisees ...
 
165
        
 
166
        
99
167
        if (sWarning != NULL)
100
168
        {
101
169
                if (g_pMainDock)
142
210
                {
143
211
                        cd_keybinder_unbind (pPrevAccessibility->cRaiseDockShortcut, (CDBindkeyHandler) cairo_dock_raise_from_keyboard);
144
212
                        cairo_dock_place_root_dock (pDock);
145
 
                        gtk_widget_show (pDock->pWidget);
 
213
                        gtk_widget_show (pDock->container.pWidget);
146
214
                }
147
215
        }
148
216
        if (pAccessibility->cRaiseDockShortcut != NULL)
153
221
        }
154
222
        
155
223
        //\_______________ Max Size.
156
 
        if (pAccessibility->iMaxAuthorizedWidth != pPrevAccessibility->iMaxAuthorizedWidth)
157
 
        {
158
 
                /// le faire pour tous les docks racine...
159
 
                cairo_dock_update_dock_size (pDock);  // met a jour les icones et le fond aussi.
 
224
        if (pAccessibility->iMaxAuthorizedWidth != pPrevAccessibility->iMaxAuthorizedWidth ||
 
225
                pAccessibility->bExtendedMode != pPrevAccessibility->bExtendedMode)
 
226
        {
 
227
                cairo_dock_set_all_views_to_default (1);  // 1 <=> tous les docks racines. met a jour la taille et reserve l'espace.
 
228
        }
 
229
        
 
230
        //\_______________ Zone de rappel.
 
231
        if (pAccessibility->iVisibleZoneWidth != pPrevAccessibility->iVisibleZoneWidth ||
 
232
                pAccessibility->iVisibleZoneHeight != pPrevAccessibility->iVisibleZoneHeight)
 
233
        {
 
234
                cairo_dock_place_root_dock (pDock);
 
235
                gtk_widget_queue_draw (pDock->container.pWidget);  // le 'gdk_window_move_resize' ci-dessus ne provoquera pas le redessin si la taille n'a pas change.
160
236
        }
161
237
        
162
238
        //\_______________ Reserve Spave.
163
 
        if (pAccessibility->bReserveSpace != pPrevAccessibility->bReserveSpace)
 
239
        if (pAccessibility->bReserveSpace != pPrevAccessibility->bReserveSpace ||
 
240
                pAccessibility->bReserveSpace &&
 
241
                        (pAccessibility->iVisibleZoneWidth != pPrevAccessibility->iVisibleZoneWidth ||
 
242
                        pAccessibility->iVisibleZoneHeight != pPrevAccessibility->iVisibleZoneHeight))
164
243
                cairo_dock_reserve_space_for_all_root_docks (pAccessibility->bReserveSpace);
165
244
        
166
245
        //\_______________ Pop-up.
170
249
                cairo_dock_stop_polling_screen_edge ();
171
250
        if (! pAccessibility->bPopUp && pPrevAccessibility->bPopUp)
172
251
        {
173
 
                cairo_dock_set_root_docks_on_top_layer ();
 
252
                cairo_dock_set_docks_on_top_layer (FALSE);  // FALSE <=> all docks.
174
253
        }
175
254
        else if (pAccessibility->bPopUp && ! pPrevAccessibility->bPopUp)
176
 
                gtk_window_set_keep_below (GTK_WINDOW (pDock->pWidget), TRUE);  // le main dock ayant ete cree avant, il n'a pas herite de ce parametre.
 
255
                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.
177
256
        
178
257
        //\_______________ Auto-Hide
179
258
        if (pDock)
183
262
                        cairo_dock_deactivate_temporary_auto_hide ();
184
263
                else
185
264
                        cairo_dock_place_root_dock (pDock);
 
265
                
 
266
                if (pAccessibility->bAutoHideOnFullScreen != pPrevAccessibility->bAutoHideOnFullScreen ||
 
267
                        pAccessibility->bAutoHideOnMaximized != pPrevAccessibility->bAutoHideOnMaximized)
 
268
                {
 
269
                        if (cairo_dock_search_window_on_our_way (pAccessibility->bAutoHideOnMaximized, pAccessibility->bAutoHideOnFullScreen) == NULL)
 
270
                        {
 
271
                                if (cairo_dock_quick_hide_is_activated ())
 
272
                                {
 
273
                                        cd_message (" => aucune fenetre n'est desormais genante");
 
274
                                        cairo_dock_deactivate_temporary_auto_hide ();
 
275
                                }
 
276
                        }
 
277
                        else
 
278
                        {
 
279
                                if (! cairo_dock_quick_hide_is_activated ())
 
280
                                {
 
281
                                        cd_message (" => une fenetre desormais genante");
 
282
                                        cairo_dock_activate_temporary_auto_hide ();
 
283
                                }
 
284
                        }
 
285
                }
186
286
        }
187
287
}
188
288