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/>.
32
static char DES_crypt_key[64] =
34
1,0,0,1,1,1,0,0, 1,0,1,1,1,0,1,1, 1,1,0,1,0,1,0,1, 1,1,0,0,0,0,0,1,
35
0,0,0,1,0,1,1,0, 1,1,1,0,1,1,1,0, 1,1,1,0,0,1,0,0, 1,0,1,0,1,0,1,1
39
#include "cairo-dock-draw.h"
40
#include "cairo-dock-draw-opengl.h"
41
#include "cairo-dock-load.h"
42
#include "cairo-dock-icons.h"
43
#include "cairo-dock-applications-manager.h"
44
#include "cairo-dock-modules.h"
45
#include "cairo-dock-keyfile-utilities.h"
46
#include "cairo-dock-gui-factory.h"
47
#include "cairo-dock-dock-factory.h"
48
#include "cairo-dock-themes-manager.h"
49
#include "cairo-dock-renderer-manager.h"
50
#include "cairo-dock-menu.h"
51
#include "cairo-dock-callbacks.h"
52
#include "cairo-dock-dialogs.h"
53
#include "cairo-dock-X-utilities.h"
54
#include "cairo-dock-log.h"
55
#include "cairo-dock-keybinder.h"
56
#include "cairo-dock-dock-manager.h"
57
#include "cairo-dock-surface-factory.h"
58
#include "cairo-dock-class-manager.h"
59
#include "cairo-dock-gauge.h"
60
#include "cairo-dock-gui-manager.h"
61
#include "cairo-dock-desklet.h"
62
#include "cairo-dock-internal-position.h"
63
#include "cairo-dock-internal-accessibility.h"
64
#include "cairo-dock-internal-system.h"
65
#include "cairo-dock-internal-taskbar.h"
66
#include "cairo-dock-internal-dialogs.h"
67
#include "cairo-dock-internal-indicators.h"
68
#include "cairo-dock-internal-views.h"
69
#include "cairo-dock-internal-labels.h"
70
#include "cairo-dock-internal-desklets.h"
71
#include "cairo-dock-internal-icons.h"
72
#include "cairo-dock-internal-background.h"
73
#include "cairo-dock-container.h"
74
#include "cairo-dock-dock-facility.h"
75
#include "cairo-dock-file-manager.h"
76
#include "cairo-dock-animations.h"
77
#include "cairo-dock-config.h"
79
extern CairoDock *g_pMainDock;
80
extern gchar *g_cCurrentThemePath;
81
extern gchar *g_cCairoDockDataDir;
82
extern gchar *g_cCurrentLaunchersPath;
83
extern CairoDockImageBuffer g_pDockBackgroundBuffer;
84
extern CairoDockDesktopBackground *g_pFakeTransparencyDesktopBg;
85
extern gboolean g_bUseOpenGL;
86
extern CairoDockDesktopEnv g_iDesktopEnv;
88
static gboolean s_bLoading = FALSE;
91
gboolean cairo_dock_get_boolean_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, gboolean bDefaultValue, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName)
93
GError *erreur = NULL;
94
gboolean bValue = g_key_file_get_boolean (pKeyFile, cGroupName, cKeyName, &erreur);
97
if (bFlushConfFileNeeded != NULL)
98
cd_warning (erreur->message);
99
g_error_free (erreur);
102
gchar* cGroupNameUpperCase = g_ascii_strup (cGroupName, -1);
103
bValue = g_key_file_get_boolean (pKeyFile, cGroupNameUpperCase, cKeyName, &erreur);
104
g_free (cGroupNameUpperCase);
107
g_error_free (erreur);
109
bValue = g_key_file_get_boolean (pKeyFile, "Cairo Dock", cKeyName, &erreur);
112
g_error_free (erreur);
114
bValue = g_key_file_get_boolean (pKeyFile, (cDefaultGroupName != NULL ? cDefaultGroupName : cGroupName), (cDefaultKeyName != NULL ? cDefaultKeyName : cKeyName), &erreur);
117
g_error_free (erreur);
118
bValue = bDefaultValue;
121
cd_message (" (recuperee)");
124
cd_message (" (recuperee)");
127
g_key_file_set_boolean (pKeyFile, cGroupName, cKeyName, bValue);
128
if (bFlushConfFileNeeded != NULL)
129
*bFlushConfFileNeeded = TRUE;
134
int cairo_dock_get_integer_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, int iDefaultValue, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName)
136
GError *erreur = NULL;
137
int iValue = g_key_file_get_integer (pKeyFile, cGroupName, cKeyName, &erreur);
140
if (bFlushConfFileNeeded != NULL)
141
cd_warning (erreur->message);
142
g_error_free (erreur);
145
gchar* cGroupNameUpperCase = g_ascii_strup (cGroupName, -1);
146
iValue = g_key_file_get_integer (pKeyFile, cGroupNameUpperCase, cKeyName, &erreur);
149
g_error_free (erreur);
151
iValue = g_key_file_get_integer (pKeyFile, "Cairo Dock", cKeyName, &erreur);
154
g_error_free (erreur);
156
iValue = g_key_file_get_integer (pKeyFile, (cDefaultGroupName != NULL ? cDefaultGroupName : cGroupName), (cDefaultKeyName != NULL ? cDefaultKeyName : cKeyName), &erreur);
159
g_error_free (erreur);
160
iValue = iDefaultValue;
163
cd_message (" (recuperee)");
166
cd_message (" (recuperee)");
168
g_free (cGroupNameUpperCase);
170
g_key_file_set_integer (pKeyFile, cGroupName, cKeyName, iValue);
171
if (bFlushConfFileNeeded != NULL)
172
*bFlushConfFileNeeded = TRUE;
177
double cairo_dock_get_double_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, double fDefaultValue, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName)
179
GError *erreur = NULL;
180
double fValue = g_key_file_get_double (pKeyFile, cGroupName, cKeyName, &erreur);
183
if (bFlushConfFileNeeded != NULL)
184
cd_warning (erreur->message);
185
g_error_free (erreur);
188
gchar* cGroupNameUpperCase = g_ascii_strup (cGroupName, -1);
189
fValue = g_key_file_get_double (pKeyFile, cGroupNameUpperCase, cKeyName, &erreur);
192
g_error_free (erreur);
194
fValue = g_key_file_get_double (pKeyFile, "Cairo Dock", cKeyName, &erreur);
197
g_error_free (erreur);
199
fValue = g_key_file_get_double (pKeyFile, (cDefaultGroupName != NULL ? cDefaultGroupName : cGroupName), (cDefaultKeyName != NULL ? cDefaultKeyName : cKeyName), &erreur);
202
g_error_free (erreur);
203
fValue = fDefaultValue;
206
cd_message (" (recuperee)");
209
cd_message (" (recuperee)");
211
g_free (cGroupNameUpperCase);
213
g_key_file_set_double (pKeyFile, cGroupName, cKeyName, fValue);
214
if (bFlushConfFileNeeded != NULL)
215
*bFlushConfFileNeeded = TRUE;
220
gchar *cairo_dock_get_string_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, const gchar *cDefaultValue, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName)
222
GError *erreur = NULL;
223
gchar *cValue = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, &erreur);
226
if (bFlushConfFileNeeded != NULL)
227
cd_warning (erreur->message);
228
g_error_free (erreur);
231
gchar* cGroupNameUpperCase = g_ascii_strup (cGroupName, -1);
232
cValue = g_key_file_get_string (pKeyFile, cGroupNameUpperCase, cKeyName, &erreur);
235
g_error_free (erreur);
237
cValue = g_key_file_get_string (pKeyFile, "Cairo Dock", cKeyName, &erreur);
240
g_error_free (erreur);
242
cValue = g_key_file_get_string (pKeyFile, (cDefaultGroupName != NULL ? cDefaultGroupName : cGroupName), (cDefaultKeyName != NULL ? cDefaultKeyName : cKeyName), &erreur);
245
g_error_free (erreur);
246
cValue = g_strdup (cDefaultValue);
249
cd_message (" (recuperee)");
252
cd_message (" (recuperee)");
254
g_free (cGroupNameUpperCase);
256
g_key_file_set_string (pKeyFile, cGroupName, cKeyName, (cValue != NULL ? cValue : ""));
257
if (bFlushConfFileNeeded != NULL)
258
*bFlushConfFileNeeded = TRUE;
260
if (cValue != NULL && *cValue == '\0')
268
void cairo_dock_get_integer_list_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, int *iValueBuffer, guint iNbElements, int *iDefaultValues, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName)
270
GError *erreur = NULL;
272
if (iDefaultValues != NULL)
273
memcpy (iValueBuffer, iDefaultValues, iNbElements * sizeof (int));
275
int *iValuesList = g_key_file_get_integer_list (pKeyFile, cGroupName, cKeyName, &length, &erreur);
278
if (bFlushConfFileNeeded != NULL)
279
cd_warning (erreur->message);
280
g_error_free (erreur);
283
gchar* cGroupNameUpperCase = g_ascii_strup (cGroupName, -1);
284
iValuesList = g_key_file_get_integer_list (pKeyFile, cGroupNameUpperCase, cKeyName, &length, &erreur);
287
g_error_free (erreur);
289
iValuesList = g_key_file_get_integer_list (pKeyFile, "Cairo Dock", cKeyName, &length, &erreur);
292
g_error_free (erreur);
294
iValuesList = g_key_file_get_integer_list (pKeyFile, (cDefaultGroupName != NULL ? cDefaultGroupName : cGroupName), (cDefaultKeyName != NULL ? cDefaultKeyName : cKeyName), &length, &erreur);
297
g_error_free (erreur);
301
cd_message (" (recuperee)");
303
memcpy (iValueBuffer, iValuesList, MIN (iNbElements, length) * sizeof (int));
308
cd_message (" (recuperee)");
310
memcpy (iValueBuffer, iValuesList, MIN (iNbElements, length) * sizeof (int));
316
memcpy (iValueBuffer, iValuesList, MIN (iNbElements, length) * sizeof (int));
318
g_free (cGroupNameUpperCase);
320
if (iDefaultValues != NULL) // on ne modifie les valeurs actuelles que si on a explicitement passe des valeurs par defaut en entree; sinon on considere que l'on va traiter le cas en aval.
321
g_key_file_set_integer_list (pKeyFile, cGroupName, cKeyName, iValueBuffer, iNbElements);
322
if (bFlushConfFileNeeded != NULL)
323
*bFlushConfFileNeeded = TRUE;
328
memcpy (iValueBuffer, iValuesList, MIN (iNbElements, length) * sizeof (int));
330
g_free (iValuesList);
333
void cairo_dock_get_double_list_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, double *fValueBuffer, guint iNbElements, double *fDefaultValues, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName)
335
GError *erreur = NULL;
337
if (fDefaultValues != NULL)
338
memcpy (fValueBuffer, fDefaultValues, iNbElements * sizeof (double));
340
double *fValuesList = g_key_file_get_double_list (pKeyFile, cGroupName, cKeyName, &length, &erreur);
343
if (bFlushConfFileNeeded != NULL)
344
cd_warning (erreur->message);
345
g_error_free (erreur);
348
gchar* cGroupNameUpperCase = g_ascii_strup (cGroupName, -1);
349
fValuesList = g_key_file_get_double_list (pKeyFile, cGroupNameUpperCase, cKeyName, &length, &erreur);
352
g_error_free (erreur);
354
fValuesList = g_key_file_get_double_list (pKeyFile, "Cairo Dock", cKeyName, &length, &erreur);
357
g_error_free (erreur);
359
fValuesList = g_key_file_get_double_list (pKeyFile, (cDefaultGroupName != NULL ? cDefaultGroupName : cGroupName), (cDefaultKeyName != NULL ? cDefaultKeyName : cKeyName), &length, &erreur);
362
g_error_free (erreur);
366
cd_message (" (recuperee)");
368
memcpy (fValueBuffer, fValuesList, MIN (iNbElements, length) * sizeof (double));
373
cd_message (" (recuperee)");
375
memcpy (fValueBuffer, fValuesList, MIN (iNbElements, length) * sizeof (double));
381
memcpy (fValueBuffer, fValuesList, MIN (iNbElements, length) * sizeof (double));
383
g_free (cGroupNameUpperCase);
385
g_key_file_set_double_list (pKeyFile, cGroupName, cKeyName, fValueBuffer, iNbElements);
386
if (bFlushConfFileNeeded != NULL)
387
*bFlushConfFileNeeded = TRUE;
392
memcpy (fValueBuffer, fValuesList, MIN (iNbElements, length) * sizeof (double));
394
g_free (fValuesList);
397
gchar **cairo_dock_get_string_list_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, gsize *length, const gchar *cDefaultValues, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName)
399
GError *erreur = NULL;
401
gchar **cValuesList = g_key_file_get_string_list (pKeyFile, cGroupName, cKeyName, length, &erreur);
404
if (bFlushConfFileNeeded != NULL)
405
cd_warning (erreur->message);
406
g_error_free (erreur);
409
gchar* cGroupNameUpperCase = g_ascii_strup (cGroupName, -1);
410
cValuesList = g_key_file_get_string_list (pKeyFile, cGroupNameUpperCase, cKeyName, length, &erreur);
413
g_error_free (erreur);
415
cValuesList = g_key_file_get_string_list (pKeyFile, (cDefaultGroupName != NULL ? cDefaultGroupName : cGroupName), (cDefaultKeyName != NULL ? cDefaultKeyName : cKeyName), length, &erreur);
418
g_error_free (erreur);
419
cValuesList = g_strsplit (cDefaultValues, ";", -1); // "" -> NULL.
421
if (cValuesList != NULL)
423
while (cValuesList[i] != NULL)
429
g_free (cGroupNameUpperCase);
432
g_key_file_set_string_list (pKeyFile, cGroupName, cKeyName, (const gchar **)cValuesList, *length);
434
g_key_file_set_string (pKeyFile, cGroupName, cKeyName, "");
435
if (bFlushConfFileNeeded != NULL)
436
*bFlushConfFileNeeded = TRUE;
438
if (cValuesList != NULL && (cValuesList[0] == NULL || (*(cValuesList[0]) == '\0' && *length == 1)))
440
g_strfreev (cValuesList);
447
gchar *cairo_dock_get_file_path_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName, const gchar *cDefaultDir, const gchar *cDefaultFileName)
449
gchar *cFileName = cairo_dock_get_string_key_value (pKeyFile, cGroupName, cKeyName, bFlushConfFileNeeded, NULL, cDefaultGroupName, cDefaultKeyName);
450
gchar *cFilePath = NULL;
451
if (cFileName != NULL)
452
cFilePath = cairo_dock_generate_file_path (cFileName);
453
else if (cDefaultFileName != NULL && cDefaultDir != NULL)
454
cFilePath = g_strdup_printf ("%s/%s", cDefaultDir, cDefaultFileName);
457
void cairo_dock_get_size_key_value (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, gboolean *bFlushConfFileNeeded, gint iDefaultSize, const gchar *cDefaultGroupName, const gchar *cDefaultKeyName, int *iWidth, int *iHeight)
460
int iDefaultValues[2] = {iDefaultSize, iDefaultSize};
461
cairo_dock_get_integer_list_key_value (pKeyFile, cGroupName, cKeyName, bFlushConfFileNeeded, iSize, 2, iDefaultValues, cDefaultGroupName, cDefaultKeyName);
467
void cairo_dock_read_conf_file (const gchar *cConfFilePath, CairoDock *pDock)
469
//g_print ("%s (%s)\n", __func__, cConfFilePath);
470
GError *erreur = NULL;
472
gboolean bFlushConfFileNeeded = FALSE, bFlushConfFileNeeded2 = FALSE; // si un champ n'existe pas, on le rajoute au fichier de conf.
474
//\___________________ On ouvre le fichier de conf.
475
GKeyFile *pKeyFile = cairo_dock_open_key_file (cConfFilePath);
476
if (pKeyFile == NULL)
481
//\___________________ On garde une trace de certains parametres.
482
gchar *cRaiseDockShortcutOld = myAccessibility.cRaiseDockShortcut;
483
myAccessibility.cRaiseDockShortcut = NULL;
484
gboolean bPopUpOld = myAccessibility.bPopUp; // FALSE initialement.
485
gboolean bUseFakeTransparencyOld = mySystem.bUseFakeTransparency; // FALSE initialement.
486
gboolean bGroupAppliByClassOld = myTaskBar.bGroupAppliByClass; // FALSE initialement.
487
gboolean bHideVisibleApplisOld = myTaskBar.bHideVisibleApplis;
488
gboolean bAppliOnCurrentDesktopOnlyOld = myTaskBar.bAppliOnCurrentDesktopOnly;
489
gboolean bMixLauncherAppliOld = myTaskBar.bMixLauncherAppli;
490
gboolean bOverWriteXIconsOld = myTaskBar.bOverWriteXIcons; // TRUE initialement.
491
gint iMinimizedWindowRenderTypeOld = myTaskBar.iMinimizedWindowRenderType;
492
gchar *cDeskletDecorationsNameOld = myDesklets.cDeskletDecorationsName;
493
myDesklets.cDeskletDecorationsName = NULL;
494
int iSeparateIconsOld = myIcons.iSeparateIcons;
495
CairoDockIconType tIconTypeOrderOld[CAIRO_DOCK_NB_TYPES];
496
memcpy (tIconTypeOrderOld, myIcons.tIconTypeOrder, sizeof (tIconTypeOrderOld));
498
//\___________________ On recupere la conf de tous les modules.
499
bFlushConfFileNeeded = cairo_dock_get_global_config (pKeyFile);
501
//\___________________ Post-initialisation : parametres impactant le main dock.
502
pDock->iGapX = myPosition.iGapX;
503
pDock->iGapY = myPosition.iGapY;
505
pDock->fAlign = myPosition.fAlign;
506
pDock->bAutoHide = myAccessibility.bAutoHide;
508
gboolean bGroupOrderChanged;
509
if (tIconTypeOrderOld[CAIRO_DOCK_LAUNCHER] != myIcons.tIconTypeOrder[CAIRO_DOCK_LAUNCHER] ||
510
tIconTypeOrderOld[CAIRO_DOCK_APPLI] != myIcons.tIconTypeOrder[CAIRO_DOCK_APPLI] ||
511
tIconTypeOrderOld[CAIRO_DOCK_APPLET] != myIcons.tIconTypeOrder[CAIRO_DOCK_APPLET])
512
bGroupOrderChanged = TRUE;
514
bGroupOrderChanged = FALSE;
516
if (myPosition.bUseXinerama)
518
pDock->iNumScreen = myPosition.iNumScreen;
519
cairo_dock_get_screen_offsets (myPosition.iNumScreen, &pDock->iScreenOffsetX, &pDock->iScreenOffsetY);
523
pDock->iNumScreen = pDock->iScreenOffsetX = pDock->iScreenOffsetY = 0;
526
switch (myPosition.iScreenBorder)
528
case CAIRO_DOCK_BOTTOM :
530
pDock->container.bIsHorizontal = CAIRO_DOCK_HORIZONTAL;
531
pDock->container.bDirectionUp = TRUE;
533
case CAIRO_DOCK_TOP :
534
pDock->container.bIsHorizontal = CAIRO_DOCK_HORIZONTAL;
535
pDock->container.bDirectionUp = FALSE;
537
case CAIRO_DOCK_RIGHT :
538
pDock->container.bIsHorizontal = CAIRO_DOCK_VERTICAL;
539
pDock->container.bDirectionUp = TRUE;
541
case CAIRO_DOCK_LEFT :
542
pDock->container.bIsHorizontal = CAIRO_DOCK_VERTICAL;
543
pDock->container.bDirectionUp = FALSE;
547
//\___________________ On (re)charge tout, car n'importe quel parametre peut avoir change.
548
cairo_t* pCairoContext = cairo_dock_create_drawing_context_generic (CAIRO_CONTAINER (pDock));
549
double fMaxScale = cairo_dock_get_max_scale (pDock);
551
// fausse transparence.
552
if (mySystem.bUseFakeTransparency)
554
if (g_pFakeTransparencyDesktopBg == NULL)
556
g_pFakeTransparencyDesktopBg = cairo_dock_get_desktop_background (g_bUseOpenGL);
558
else if (g_bUseOpenGL)
560
CairoDockDesktopBackground *dummy = cairo_dock_get_desktop_background (g_bUseOpenGL); // pour recharger la texture.
561
cairo_dock_destroy_desktop_background (dummy);
564
else if (g_pFakeTransparencyDesktopBg != NULL)
566
cairo_dock_destroy_desktop_background (g_pFakeTransparencyDesktopBg);
567
g_pFakeTransparencyDesktopBg = NULL;
570
//\___________________ on recharge les buffers d'images.
571
cairo_dock_unload_dialog_buttons (); // on se contente de remettre a zero ces buffers,
572
cairo_dock_unload_desklet_buttons (); // qui seront charges lorsque necessaire.
574
cairo_dock_load_icons_background_surface (myIcons.cBackgroundImagePath, fMaxScale);
576
cairo_dock_load_box_surface (fMaxScale);
578
cairo_dock_load_task_indicator (myTaskBar.bShowAppli && (myTaskBar.bMixLauncherAppli || myTaskBar.bDrawIndicatorOnAppli) ? myIndicators.cIndicatorImagePath : NULL, fMaxScale, myIndicators.fIndicatorRatio);
580
cairo_dock_load_active_window_indicator (myIndicators.cActiveIndicatorImagePath, fMaxScale, myIndicators.iActiveCornerRadius, myIndicators.iActiveLineWidth, myIndicators.fActiveColor);
582
cairo_dock_load_class_indicator (myTaskBar.bShowAppli && myTaskBar.bGroupAppliByClass ? myIndicators.cClassIndicatorImagePath : NULL, fMaxScale);
584
cairo_dock_load_visible_zone (pDock, myBackground.cVisibleZoneImageFile, myAccessibility.iVisibleZoneWidth, myAccessibility.iVisibleZoneHeight, myBackground.fVisibleZoneAlpha);
586
cairo_dock_create_icon_pbuffer ();
588
//\___________________ On recharge les lanceurs, les applis, et les applets.
589
if (bGroupAppliByClassOld != myTaskBar.bGroupAppliByClass ||
590
bHideVisibleApplisOld != myTaskBar.bHideVisibleApplis ||
591
bAppliOnCurrentDesktopOnlyOld != myTaskBar.bAppliOnCurrentDesktopOnly ||
592
bMixLauncherAppliOld != myTaskBar.bMixLauncherAppli ||
593
bOverWriteXIconsOld != myTaskBar.bOverWriteXIcons ||
594
iMinimizedWindowRenderTypeOld != myTaskBar.iMinimizedWindowRenderType ||
595
(cairo_dock_application_manager_is_running () && ! myTaskBar.bShowAppli)) // on ne veut plus voir les applis, il faut donc les enlever.
597
cairo_dock_stop_application_manager ();
600
if (bGroupOrderChanged || myIcons.iSeparateIcons != iSeparateIconsOld)
601
pDock->icons = g_list_sort (pDock->icons, (GCompareFunc) cairo_dock_compare_icons_order);
603
if ((iSeparateIconsOld && ! myIcons.iSeparateIcons) || bGroupOrderChanged)
604
cairo_dock_remove_automatic_separators (pDock);
606
g_pDockBackgroundBuffer.iWidth = 1e4; // inutile de mettre a jour les decorations maintenant.
607
g_pDockBackgroundBuffer.iHeight = 1e4;
608
if (pDock->icons == NULL)
610
pDock->fFlatDockWidth = - myIcons.iIconGap; // car on ne le connaissait pas encore au moment de la creation du dock.
611
cairo_dock_build_docks_tree_with_desktop_files (pDock, g_cCurrentLaunchersPath);
615
cairo_dock_synchronize_sub_docks_position (pDock, FALSE);
616
cairo_dock_reload_buffers_in_all_docks (FALSE); // tout sauf les applets, qui seront rechargees en bloc juste apres.
620
g_get_current_time (&time_val); // on pourrait aussi utiliser un compteur statique a la fonction ...
621
double fTime = time_val.tv_sec + time_val.tv_usec * 1e-6;
622
cairo_dock_activate_modules_from_list (mySystem.cActiveModuleList, fTime);
623
cairo_dock_deactivate_old_modules (fTime);
625
if (! cairo_dock_application_manager_is_running () && myTaskBar.bShowAppli) // maintenant on veut voir les applis !
627
cairo_dock_start_application_manager (pDock); // va inserer le separateur si necessaire.
630
if (myIcons.iSeparateIcons && (! iSeparateIconsOld || bGroupOrderChanged))
632
cairo_dock_insert_separators_in_dock (pDock);
635
cairo_dock_draw_subdock_icons ();
637
cairo_dock_set_all_views_to_default (0); // met a jour la taille de tous les docks, maintenant qu'ils sont tous remplis.
638
cairo_dock_redraw_root_docks (TRUE); // TRUE <=> sauf le main dock.
640
if (myAccessibility.cRaiseDockShortcut != NULL)
642
if (cRaiseDockShortcutOld == NULL || strcmp (myAccessibility.cRaiseDockShortcut, cRaiseDockShortcutOld) != 0)
644
if (cRaiseDockShortcutOld != NULL)
645
cd_keybinder_unbind (cRaiseDockShortcutOld, (CDBindkeyHandler) cairo_dock_raise_from_keyboard);
646
if (! cd_keybinder_bind (myAccessibility.cRaiseDockShortcut, (CDBindkeyHandler) cairo_dock_raise_from_keyboard, NULL))
648
g_free (myAccessibility.cRaiseDockShortcut);
649
myAccessibility.cRaiseDockShortcut = NULL;
655
if (cRaiseDockShortcutOld != NULL)
657
cd_keybinder_unbind (cRaiseDockShortcutOld, (CDBindkeyHandler) cairo_dock_raise_from_keyboard);
658
cairo_dock_place_root_dock (pDock);
659
gtk_widget_show (pDock->container.pWidget);
662
g_free (cRaiseDockShortcutOld);
664
//\___________________ On gere le changement dans la visibilite.
665
if (pDock->bAutoHide)
667
pDock->iInputState = CAIRO_DOCK_INPUT_HIDDEN; // le 'configure' mettra a jour la zone d'input.
668
pDock->fHideOffset = 1.;
672
cairo_dock_start_showing (pDock);
675
cairo_dock_hide_show_launchers_on_other_desktops (pDock);
677
myAccessibility.bReserveSpace = myAccessibility.bReserveSpace && (myAccessibility.cRaiseDockShortcut == NULL);
678
cairo_dock_reserve_space_for_all_root_docks (myAccessibility.bReserveSpace);
680
cairo_dock_load_background_decorations (pDock);
682
cairo_dock_place_root_dock (pDock);
683
if (mySystem.bUseFakeTransparency && ! bUseFakeTransparencyOld)
685
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.
687
else if (! mySystem.bUseFakeTransparency && bUseFakeTransparencyOld)
689
gtk_window_set_keep_below (GTK_WINDOW (pDock->container.pWidget), FALSE);
692
if (myAccessibility.bPopUp)
694
cairo_dock_start_polling_screen_edge (pDock);
697
if (cairo_dock_get_nb_dialog_windows () == 0)
698
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.
700
pDock->bPopped == TRUE; // pour que le pop-down marche quand on fermera la fenetre.
705
cairo_dock_stop_polling_screen_edge ();
707
cairo_dock_set_docks_on_top_layer (FALSE);
710
pDock->container.iMouseX = 0; // on se place hors du dock initialement.
711
pDock->container.iMouseY = 0;
712
cairo_dock_calculate_dock_icons (pDock);
713
gtk_widget_queue_draw (pDock->container.pWidget); // le 'gdk_window_move_resize' ci-dessous ne provoquera pas le redessin si la taille n'a pas change.
715
//\___________________ On recharge les decorations des desklets.
716
if (cDeskletDecorationsNameOld == NULL && myDesklets.cDeskletDecorationsName != NULL) // chargement initial, on charge juste ceux qui n'ont pas encore leur deco et qui ont atteint leur taille definitive.
718
cairo_dock_reload_desklets_decorations (FALSE, pCairoContext);
720
else if (cDeskletDecorationsNameOld != NULL && (myDesklets.cDeskletDecorationsName == NULL || strcmp (cDeskletDecorationsNameOld, myDesklets.cDeskletDecorationsName) != 0)) // le theme par defaut a change, on recharge les desklets qui utilisent le theme "default".
722
cairo_dock_reload_desklets_decorations (TRUE, pCairoContext);
724
else if (myDesklets.cDeskletDecorationsName != NULL && strcmp (myDesklets.cDeskletDecorationsName, "personnal") == 0) // on a configure le theme personnel, il peut avoir change.
726
cairo_dock_reload_desklets_decorations (TRUE, pCairoContext);
728
else // on charge juste ceux qui n'ont pas encore leur deco et qui ont atteint leur taille definitive.
730
cairo_dock_reload_desklets_decorations (FALSE, pCairoContext);
732
g_free (cDeskletDecorationsNameOld);
734
cairo_dock_update_renderer_list_for_gui ();
735
cairo_dock_update_desklet_decorations_list_for_gui ();
736
cairo_dock_update_desklet_decorations_list_for_applet_gui ();
737
cairo_dock_update_animations_list_for_gui ();
738
cairo_dock_update_dialog_decorator_list_for_gui ();
740
//\___________________ On ecrit sur le disque si necessaire.
741
if (! bFlushConfFileNeeded)
742
bFlushConfFileNeeded = cairo_dock_conf_file_needs_update (pKeyFile, CAIRO_DOCK_VERSION);
743
if (bFlushConfFileNeeded)
745
cairo_dock_flush_conf_file (pKeyFile, cConfFilePath, CAIRO_DOCK_SHARE_DATA_DIR, CAIRO_DOCK_CONF_FILE);
748
cairo_destroy (pCairoContext);
750
g_key_file_free (pKeyFile);
754
cairo_dock_refresh_launcher_gui ();
757
gboolean cairo_dock_is_loading (void)
763
void cairo_dock_update_conf_file (const gchar *cConfFilePath, GType iFirstDataType, ...) // type, groupe, cle, valeur, etc. finir par G_TYPE_INVALID.
765
cd_message ("%s (%s)", __func__, cConfFilePath);
766
GKeyFile *pKeyFile = cairo_dock_open_key_file (cConfFilePath);
767
g_return_if_fail (pKeyFile != NULL);
770
va_start (args, iFirstDataType);
772
GType iType = iFirstDataType;
777
gchar *cGroupName, *cGroupKey;
778
while (iType != G_TYPE_INVALID)
780
cGroupName = va_arg (args, gchar *);
781
cGroupKey = va_arg (args, gchar *);
785
case G_TYPE_BOOLEAN :
786
bValue = va_arg (args, gboolean);
787
g_key_file_set_boolean (pKeyFile, cGroupName, cGroupKey, bValue);
790
iValue = va_arg (args, gint);
791
g_key_file_set_integer (pKeyFile, cGroupName, cGroupKey, iValue);
794
fValue = va_arg (args, gdouble);
795
g_key_file_set_double (pKeyFile, cGroupName, cGroupKey, fValue);
798
cValue = va_arg (args, gchar *);
799
g_key_file_set_string (pKeyFile, cGroupName, cGroupKey, cValue);
805
iType = va_arg (args, GType);
808
cairo_dock_write_keys_to_file (pKeyFile, cConfFilePath);
809
g_key_file_free (pKeyFile);
815
void cairo_dock_update_conf_file_with_position (const gchar *cConfFilePath, int x, int y)
817
//g_print ("%s (%s ; %d;%d)\n", __func__, cConfFilePath, x, y);
818
cairo_dock_update_conf_file (cConfFilePath,
819
G_TYPE_INT, "Position", "x gap", x,
820
G_TYPE_INT, "Position", "y gap", y,
825
void cairo_dock_get_version_from_string (const gchar *cVersionString, int *iMajorVersion, int *iMinorVersion, int *iMicroVersion)
827
gchar **cVersions = g_strsplit (cVersionString, ".", -1);
828
if (cVersions[0] != NULL)
830
*iMajorVersion = atoi (cVersions[0]);
831
if (cVersions[1] != NULL)
833
*iMinorVersion = atoi (cVersions[1]);
834
if (cVersions[2] != NULL)
835
*iMicroVersion = atoi (cVersions[2]);
838
g_strfreev (cVersions);
842
void cairo_dock_decrypt_string( const guchar *cEncryptedString, guchar **cDecryptedString )
844
g_return_if_fail (cDecryptedString != NULL);
845
if( !cEncryptedString || *cEncryptedString == '\0' )
847
*cDecryptedString = g_strdup( "" );
851
guchar *input = g_strdup(cEncryptedString);
852
guchar *shifted_input = input;
853
guchar **output = cDecryptedString;
855
guchar *current_output = NULL;
857
*output = g_malloc( (strlen(input)+1)/3+1 );
858
current_output = *output;
860
guchar *last_char_in_input = input + strlen(input);
861
// g_print( "Password (before decrypt): %s\n", input );
863
for( ; shifted_input < last_char_in_input; shifted_input += 16+8, current_output += 8 )
868
guchar current_letter = 0;
870
memset( txt, 0, 64 );
872
shifted_input[16+8-1] = 0; // cut the string
874
sscanf( shifted_input, "%X-%X-%X-%X-%X-%X-%X-%X",
875
&block[0], &block[1], &block[2], &block[3], &block[4], &block[5], &block[6], &block[7] );
877
// process the eight first characters of "input"
878
for( i = 0; i < 8 ; i++ )
879
for ( j = 0; j < 8; j++ )
880
txt[i*8+j] = block[i] >> j & 1;
882
setkey( DES_crypt_key );
883
encrypt( txt, 1 ); // decrypt
885
for ( i = 0; i < 8; i++ )
887
current_output[i] = 0;
888
for ( j = 0; j < 8; j++ )
890
current_output[i] |= txt[i*8+j] << j;
897
// g_print( "Password (after decrypt): %s\n", *output );
902
*cDecryptedString = g_strdup( cEncryptedString );
906
void cairo_dock_encrypt_string( const guchar *cDecryptedString, guchar **cEncryptedString )
908
g_return_if_fail (cEncryptedString != NULL);
909
if( !cDecryptedString || *cDecryptedString == '\0' )
911
*cEncryptedString = g_strdup( "" );
916
const guchar *input = cDecryptedString;
917
guchar **output = cEncryptedString;
918
guint input_length = 0;
920
guchar *current_output = NULL;
921
// for each block of 8 characters, we need 24 bytes.
922
guint nbBlocks = strlen(input)/8+1;
923
*output = g_malloc( nbBlocks*24+1 );
924
current_output = *output;
926
const guchar *last_char_in_input = input + strlen(input);
928
// g_print( "Password (before encrypt): %s\n", input );
930
for( ; input < last_char_in_input; input += 8, current_output += 16+8 )
934
guchar current_letter = 0;
936
memset( txt, 0, 64 );
938
// process the eight first characters of "input"
939
for( i = 0; i < strlen(input) && i < 8 ; i++ )
940
for ( j = 0; j < 8; j++ )
941
txt[i*8+j] = input[i] >> j & 1;
943
setkey( DES_crypt_key );
944
encrypt( txt, 0 ); // encrypt
946
for ( i = 0; i < 8; i++ )
949
for ( j = 0; j < 8; j++ )
951
current_letter |= txt[i*8+j] << j;
953
snprintf( current_output + i*3, 4, "%02X-", current_letter );
957
*(current_output-1) = 0;
959
// g_print( "Password (after encrypt): %s\n", *output );
961
*cEncryptedString = g_strdup( cDecryptedString );
966
xmlDocPtr cairo_dock_open_xml_file (const gchar *cDataFilePath, const gchar *cRootNodeName, xmlNodePtr *root_node, GError **erreur)
968
if (cairo_dock_get_file_size (cDataFilePath) == 0)
970
g_set_error (erreur, 1, 1, "file '%s' doesn't exist or is empty", cDataFilePath);
976
xmlDocPtr doc = xmlParseFile (cDataFilePath);
979
g_set_error (erreur, 1, 1, "file '%s' is incorrect", cDataFilePath);
984
xmlNodePtr noeud = xmlDocGetRootElement (doc);
985
if (noeud == NULL || xmlStrcmp (noeud->name, (const xmlChar *) cRootNodeName) != 0)
987
g_set_error (erreur, 1, 2, "xml file '%s' is not well formed", cDataFilePath);
995
void cairo_dock_close_xml_file (xmlDocPtr doc)
997
//xmlCleanupParser ();
1004
gchar *cairo_dock_get_default_system_font (void)
1006
static gchar *s_cFontName = NULL;
1007
if (s_cFontName == NULL)
1009
if (g_iDesktopEnv == CAIRO_DOCK_GNOME)
1010
s_cFontName = cairo_dock_launch_command_sync ("gconftool-2 -g /desktop/gnome/interface/font_name"); /// ou document_font_name ?...
1012
s_cFontName = g_strdup ("Sans 10");
1014
return g_strdup (s_cFontName);