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

« back to all changes in this revision

Viewing changes to src/cairo-dock-gui-simple.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:
24
24
#include <glib/gstdio.h>
25
25
#include <glib/gi18n.h>
26
26
 
27
 
#include "cairo-dock-struct.h"
 
27
#include "config.h"
28
28
#include "cairo-dock-modules.h"
29
29
#include "cairo-dock-log.h"
30
30
#include "cairo-dock-gui-factory.h"
31
31
#include "cairo-dock-keyfile-utilities.h"
32
32
#include "cairo-dock-animations.h"
33
 
#include "cairo-dock-dialogs.h"
 
33
#include "cairo-dock-dialog-manager.h"
34
34
#include "cairo-dock-dock-manager.h"
35
35
#include "cairo-dock-dock-factory.h"
36
36
#include "cairo-dock-launcher-factory.h"
37
37
#include "cairo-dock-internal-taskbar.h"
38
38
#include "cairo-dock-internal-accessibility.h"
 
39
#include "cairo-dock-internal-views.h"
39
40
#include "cairo-dock-internal-icons.h"
40
 
#include "cairo-dock-internal-views.h"
 
41
#include "cairo-dock-internal-position.h"
41
42
#include "cairo-dock-desktop-file-factory.h"
42
43
#include "cairo-dock-themes-manager.h"
 
44
#include "cairo-dock-applications-manager.h"
 
45
#include "cairo-dock-backends-manager.h"
43
46
#include "cairo-dock-gui-manager.h"
44
47
#include "cairo-dock-gui-factory.h"
 
48
#include "cairo-dock-gui-switch.h"
45
49
#include "cairo-dock-gui-simple.h"
46
50
 
47
51
#define CAIRO_DOCK_PREVIEW_WIDTH 200
48
52
#define CAIRO_DOCK_PREVIEW_HEIGHT 250
49
53
#define CAIRO_DOCK_SIMPLE_PANEL_WIDTH 1024
50
54
#define CAIRO_DOCK_SIMPLE_PANEL_HEIGHT 700
 
55
#define CAIRO_DOCK_SIMPLE_CONF_FILE "cairo-dock-simple.conf"
 
56
#define ICON_HUGE 60
 
57
#define ICON_BIG 56
 
58
#define ICON_MEDIUM 48
 
59
#define ICON_SMALL 42
 
60
#define ICON_TINY 36
51
61
 
52
62
static GtkWidget *s_pSimpleConfigWindow = NULL;
53
63
static GtkWidget *s_pSimpleConfigModuleWindow = NULL;
57
67
static int s_iIconSize;
58
68
static int s_iTaskbarType;
59
69
static gboolean s_bSeparateIcons;
 
70
static gchar *s_cHoverAnim = NULL;
 
71
static gchar *s_cHoverEffect = NULL;
 
72
static gchar *s_cClickAnim = NULL;
 
73
static gchar *s_cClickEffect = NULL;
 
74
static int s_iEffectOnDisappearance = -1;
60
75
 
61
76
extern gchar *g_cConfFile;
62
77
extern gchar *g_cCurrentThemePath;
63
 
extern CairoDock *g_pMainDock;
64
78
extern gchar *g_cCairoDockDataDir;
 
79
extern gboolean g_bUseOpenGL;
65
80
 
66
81
#define cd_reload(module_name) do {\
67
82
        pInternalModule = cairo_dock_find_internal_module_from_name (module_name);\
69
84
                cairo_dock_reload_internal_module_from_keyfile (pInternalModule, pKeyFile);\
70
85
        } while (0)
71
86
 
 
87
static gchar *_get_animation_name (int i)
 
88
{
 
89
        switch (i)
 
90
        {
 
91
                case 0:
 
92
                        return g_strdup ("bounce");
 
93
                case 1:
 
94
                        return g_strdup ("rotate");
 
95
                case 2:
 
96
                        return g_strdup ("blink");
 
97
                case 3:
 
98
                        return g_strdup ("pulse");
 
99
                case 4:
 
100
                        return g_strdup ("wobbly");
 
101
                case 5:
 
102
                        return g_strdup ("wave");
 
103
                case 6:
 
104
                        return g_strdup ("spot");
 
105
                default:
 
106
                return g_strdup ("");
 
107
        }
 
108
}
 
109
static const gchar *_get_animation_number (const gchar *s)
 
110
{
 
111
        if (!s)
 
112
                return "";
 
113
        if (strcmp (s, "bounce") == 0)
 
114
                return "0";
 
115
        
 
116
        if (strcmp (s, "rotate") == 0)
 
117
                return "1";
 
118
        
 
119
        if (strcmp (s, "blink") == 0)
 
120
                return "2";
 
121
        
 
122
        if (strcmp (s, "pulse") == 0)
 
123
                return "3";
 
124
        
 
125
        if (strcmp (s, "wobbly") == 0)
 
126
                return "4";
 
127
        
 
128
        if (strcmp (s, "wave") == 0)
 
129
                return "5";
 
130
        
 
131
        if (strcmp (s, "spot") == 0)
 
132
                return "6";
 
133
        return "";
 
134
}
 
135
static gchar *_get_effect_name (int i)
 
136
{
 
137
        switch (i)
 
138
        {
 
139
                case 0:
 
140
                        return g_strdup ("fire");
 
141
                case 1:
 
142
                        return g_strdup ("stars");
 
143
                case 2:
 
144
                        return g_strdup ("rain");
 
145
                case 3:
 
146
                        return g_strdup ("snow");
 
147
                case 4:
 
148
                        return g_strdup ("storm");
 
149
                case 5:
 
150
                        return g_strdup ("firework");
 
151
                default:
 
152
                return g_strdup ("");
 
153
        }
 
154
}
 
155
static const gchar *_get_effect_number (const gchar *s)
 
156
{
 
157
        if (!s)
 
158
                return "";
 
159
        if (strcmp (s, "fire") == 0)
 
160
                return "0";
 
161
        
 
162
        if (strcmp (s, "stars") == 0)
 
163
                return "1";
 
164
        
 
165
        if (strcmp (s, "rain") == 0)
 
166
                return "2";
 
167
        
 
168
        if (strcmp (s, "snow") == 0)
 
169
                return "3";
 
170
        
 
171
        if (strcmp (s, "storm") == 0)
 
172
                return "4";
 
173
        
 
174
        if (strcmp (s, "firework") == 0)
 
175
                return "5";
 
176
        return "";
 
177
}
 
178
 
72
179
static gchar * _make_simple_conf_file (void)
73
180
{
74
181
        //\_____________ On actualise le fichier de conf simple.
93
200
        }
94
201
        
95
202
        // comportement
96
 
        CairoDockPositionType iScreenBorder = (g_pMainDock ? ((! g_pMainDock->container.bIsHorizontal) << 1) | (! g_pMainDock->container.bDirectionUp) : 0);
97
 
        g_key_file_set_integer (pSimpleKeyFile, "Behavior", "screen border", iScreenBorder);
 
203
        g_key_file_set_integer (pSimpleKeyFile, "Behavior", "screen border", myPosition.iScreenBorder);
98
204
        
99
 
        gboolean iVisibility;
100
 
        if (myAccessibility.bReserveSpace)
101
 
                iVisibility = 1;
102
 
        else if (myAccessibility.bPopUp)
103
 
                iVisibility = 2;
104
 
        else if (myAccessibility.bAutoHide)
105
 
                iVisibility = 3;
106
 
        else if (myAccessibility.bAutoHideOnMaximized)
107
 
                iVisibility = 4;
108
 
        else if (myAccessibility.cRaiseDockShortcut)
109
 
                iVisibility = 5;
110
 
        else
111
 
                iVisibility = 0;
112
 
        g_key_file_set_integer (pSimpleKeyFile, "Behavior", "visibility", iVisibility);
 
205
        g_key_file_set_integer (pSimpleKeyFile, "Behavior", "visibility", myAccessibility.iVisibility);
113
206
        
114
207
        g_key_file_set_integer (pSimpleKeyFile, "Behavior", "show_on_click", (myAccessibility.bShowSubDockOnClick ? 1 : 0));
115
208
        
 
209
        g_key_file_set_string (pSimpleKeyFile, "Behavior", "hide effect", myAccessibility.cHideEffect);
 
210
        
116
211
        int iTaskbarType;
117
212
        if (! myTaskBar.bShowAppli)
118
213
                iTaskbarType = 0;
125
220
        s_iTaskbarType = iTaskbarType;
126
221
        g_key_file_set_integer (pSimpleKeyFile, "Behavior", "taskbar", iTaskbarType);
127
222
        
 
223
        // animations
 
224
        CairoDockModule *pModule;
 
225
        CairoDockModuleInstance *pModuleInstance;
 
226
        int iAnimOnMouseHover = -1;
 
227
        int iAnimOnClick = -1;
 
228
        int iEffectOnMouseHover = -1;
 
229
        int iEffectOnClick = -1;
 
230
        int iEffectOnDisappearance = 4;
 
231
        gsize length;
 
232
        pModule = cairo_dock_find_module_from_name ("Animated icons");
 
233
        if (pModule != NULL && pModule->pInstancesList != NULL)
 
234
        {
 
235
                pModuleInstance = pModule->pInstancesList->data;
 
236
                GKeyFile *pKeyFile = cairo_dock_open_key_file (pModuleInstance->cConfFilePath);
 
237
                if (pKeyFile)
 
238
                {
 
239
                        int *pAnimations = g_key_file_get_integer_list (pKeyFile, "Global", "hover effects", &length, NULL);
 
240
                        if (pAnimations != NULL)
 
241
                        {
 
242
                                iAnimOnMouseHover = pAnimations[0];
 
243
                                g_free (pAnimations);
 
244
                        }
 
245
                        pAnimations = g_key_file_get_integer_list (pKeyFile, "Global", "click launchers", &length, NULL);
 
246
                        if (pAnimations != NULL)
 
247
                        {
 
248
                                iAnimOnClick = pAnimations[0];
 
249
                                g_free (pAnimations);
 
250
                        }
 
251
                        g_key_file_free (pKeyFile);
 
252
                }
 
253
        }
 
254
        
 
255
        pModule = cairo_dock_find_module_from_name ("icon effects");
 
256
        if (pModule != NULL && pModule->pInstancesList != NULL)
 
257
        {
 
258
                pModuleInstance = pModule->pInstancesList->data;
 
259
                GKeyFile *pKeyFile = cairo_dock_open_key_file (pModuleInstance->cConfFilePath);
 
260
                if (pKeyFile)
 
261
                {
 
262
                        int *pAnimations = g_key_file_get_integer_list (pKeyFile, "Global", "effects", &length, NULL);
 
263
                        if (pAnimations != NULL)
 
264
                        {
 
265
                                iEffectOnMouseHover = pAnimations[0];
 
266
                                g_free (pAnimations);
 
267
                        }
 
268
                        pAnimations = g_key_file_get_integer_list (pKeyFile, "Global", "click launchers", &length, NULL);
 
269
                        if (pAnimations != NULL)
 
270
                        {
 
271
                                iEffectOnClick = pAnimations[0];
 
272
                                g_free (pAnimations);
 
273
                        }
 
274
                        g_key_file_free (pKeyFile);
 
275
                }
 
276
        }
 
277
        
 
278
        s_iEffectOnDisappearance = -1;
 
279
        pModule = cairo_dock_find_module_from_name ("illusion");
 
280
        if (pModule != NULL && pModule->pInstancesList != NULL)
 
281
        {
 
282
                pModuleInstance = pModule->pInstancesList->data;
 
283
                GKeyFile *pKeyFile = cairo_dock_open_key_file (pModuleInstance->cConfFilePath);
 
284
                if (pKeyFile)
 
285
                {
 
286
                        s_iEffectOnDisappearance = g_key_file_get_integer (pKeyFile, "Global", "disappearance", NULL);
 
287
                        g_key_file_free (pKeyFile);
 
288
                }
 
289
        }
 
290
        
 
291
        g_free (s_cHoverAnim);
 
292
        s_cHoverAnim = _get_animation_name (iAnimOnMouseHover);
 
293
        g_free (s_cHoverEffect);
 
294
        s_cHoverEffect = _get_effect_name (iEffectOnMouseHover);
 
295
        g_free (s_cClickAnim);
 
296
        s_cClickAnim = _get_animation_name (iAnimOnClick);
 
297
        g_free (s_cClickEffect);
 
298
        s_cClickEffect = _get_effect_name (iEffectOnClick);
 
299
        const gchar *cOnMouseHover[2] = {s_cHoverAnim, s_cHoverEffect};
 
300
        const gchar *cOnClick[2] = {s_cClickAnim, s_cClickEffect};
 
301
        
 
302
        if (g_bUseOpenGL)
 
303
                g_key_file_set_string_list (pSimpleKeyFile, "Behavior", "anim_hover", cOnMouseHover, 2);
 
304
        else
 
305
        {
 
306
                g_key_file_remove_comment (pSimpleKeyFile, "Behavior", "anim_hover", NULL);
 
307
                g_key_file_remove_key (pSimpleKeyFile, "Behavior", "anim_hover", NULL);
 
308
        }
 
309
        g_key_file_set_string_list (pSimpleKeyFile, "Behavior", "anim_click", cOnClick, 2);
 
310
        if (g_bUseOpenGL)
 
311
                g_key_file_set_integer (pSimpleKeyFile, "Behavior", "anim_disappear", s_iEffectOnDisappearance);
 
312
        else
 
313
        {
 
314
                g_key_file_remove_comment (pSimpleKeyFile, "Behavior", "anim_disappear", NULL);
 
315
                g_key_file_remove_key (pSimpleKeyFile, "Behavior", "anim_disappear", NULL);
 
316
        }
 
317
        if (g_bUseOpenGL)
 
318
        {
 
319
                gchar *cComment = g_key_file_get_comment (pSimpleKeyFile, "Behavior", "anim_disappear", NULL);
 
320
                if (cComment != NULL)
 
321
                {
 
322
                        gchar *str = cComment;
 
323
                        cComment = g_strdup_printf ("l[%s;%s;%s;%s;%s;%s]%s", "Evaporate", "Fade out", "Explode", "Break", "Black Hole", "Random", cComment+1);
 
324
                        g_free (str);
 
325
                        g_key_file_set_comment (pSimpleKeyFile, "Behavior", "anim_disappear", cComment, NULL);
 
326
                        g_free (cComment);
 
327
                }
 
328
        }
 
329
        
128
330
        // apparence
129
331
        g_key_file_set_string (pSimpleKeyFile, "Appearance", "default icon directory", myIcons.cIconTheme);
130
332
        
131
333
        int iIconSize;
132
 
        if (myIcons.tIconAuthorizedWidth[CAIRO_DOCK_LAUNCHER] <= 42)  // icones toutes petites.
 
334
        int s = myIcons.tIconAuthorizedWidth[CAIRO_DOCK_LAUNCHER];
 
335
        if (s <= ICON_TINY+2)  // icones toutes petites.
133
336
                iIconSize = 0;
134
 
        else if (myIcons.tIconAuthorizedWidth[CAIRO_DOCK_LAUNCHER] >= 54)  // icones tres grandes.
 
337
        else if (s >= ICON_HUGE-2)  // icones tres grandes.
135
338
                iIconSize = 4;
136
 
        else if (myIcons.tIconAuthorizedWidth[CAIRO_DOCK_LAUNCHER] <= 48)
 
339
        else if (s <= ICON_MEDIUM)
137
340
        {
138
 
                if (myIcons.fAmplitude >= 2)  // icones petites.
 
341
                if (myIcons.fAmplitude >= 2 || s <= ICON_SMALL)  // icones petites.
139
342
                        iIconSize = 1;
140
343
                else
141
 
                        iIconSize = 3;  // moyennes.
 
344
                        iIconSize = 2;  // moyennes.
142
345
        }
143
346
        else  // grandes.
144
 
                iIconSize = 4;
 
347
                iIconSize = 3;
145
348
        
146
349
        g_key_file_set_integer (pSimpleKeyFile, "Appearance", "icon size", iIconSize);
147
350
        s_iIconSize = iIconSize;
185
388
        //\_______________ On importe le theme.
186
389
        cairo_dock_set_status_message_printf (NULL, _("Importing theme %s ..."), cNewThemeName);
187
390
        gboolean bThemeImported = cairo_dock_import_theme (cNewThemeName, bLoadBehavior, bLoadLaunchers);
188
 
        g_print ("bThemeImported : %d\n", bThemeImported);
 
391
        cd_debug ("bThemeImported : %d\n", bThemeImported);
189
392
        
190
393
        //\_______________ On le charge.
191
394
        if (bThemeImported)
197
400
        cairo_dock_set_status_message (s_pSimpleConfigWindow, "");
198
401
        
199
402
        //\_______________ On recharge la fenetre.
200
 
        g_print ("reload\n");
 
403
        cd_debug ("reload\n");
201
404
        cConfFilePath = _make_simple_conf_file ();
202
405
        g_free (cConfFilePath);
203
406
        cairo_dock_reload_generic_gui (s_pSimpleConfigWindow);
204
 
        /*GSList *pWidgetList = g_object_get_data (G_OBJECT (s_pSimpleConfigWindow), "widget-list");
205
 
        g_return_val_if_fail (pWidgetList != NULL, TRUE);
206
 
        cairo_dock_free_generated_widget_list (pWidgetList);
207
 
        pWidgetList = NULL;
208
 
        g_object_set_data (G_OBJECT (s_pSimpleConfigWindow), "widget-list", NULL);
209
 
        
210
 
        GPtrArray *pDataGarbage = g_object_get_data (G_OBJECT (s_pSimpleConfigWindow), "garbage");
211
 
        /// nettoyer...
212
 
        g_object_set_data (G_OBJECT (s_pSimpleConfigWindow), "garbage", NULL);
213
 
        
214
 
        GtkWidget *pMainVBox = gtk_bin_get_child (GTK_BIN (s_pSimpleConfigWindow));
215
 
        GList *children = gtk_container_get_children (GTK_CONTAINER (pMainVBox));
216
 
        g_return_val_if_fail (children != NULL, TRUE);
217
 
        GtkWidget *pNoteBook = children->data;
218
 
        gtk_widget_destroy (pNoteBook);
219
 
        
220
 
        cConfFilePath = g_strdup_printf ("%s/%s", g_cCurrentThemePath, CAIRO_DOCK_SIMPLE_CONF_FILE);
221
 
        
222
 
        pNoteBook = cairo_dock_build_conf_file_widget (cConfFilePath, NULL, s_pSimpleConfigWindow, &pWidgetList, pDataGarbage, cConfFilePath);
223
 
        gtk_box_pack_start (GTK_BOX (pMainVBox),
224
 
                pNoteBook,
225
 
                TRUE,
226
 
                TRUE,
227
 
                0);
228
 
        gtk_widget_show_all (pNoteBook);
229
 
        g_object_set_data (G_OBJECT (s_pSimpleConfigWindow), "widget-list", pWidgetList);
230
 
        g_object_set_data (G_OBJECT (s_pSimpleConfigWindow), "garbage", pDataGarbage);*/
231
407
        return TRUE;
232
408
}
233
409
 
257
433
        int iVisibility = g_key_file_get_integer (pSimpleKeyFile, "Behavior", "visibility", NULL);
258
434
        g_key_file_set_integer (pKeyFile, "Accessibility", "visibility", iVisibility);
259
435
        
260
 
        gboolean bShowOnClick = (g_key_file_get_integer (pSimpleKeyFile, "Behavior", "show_on_click", NULL) == 1);
261
 
        g_key_file_set_boolean (pKeyFile, "Accessibility", "show on click", bShowOnClick);
 
436
        gchar *cHideEffect = g_key_file_get_string (pSimpleKeyFile, "Behavior", "hide effect", NULL);
 
437
        g_key_file_set_string (pKeyFile, "Accessibility", "hide effect", cHideEffect);
 
438
        g_free (cHideEffect);
 
439
        
 
440
        int iShowOnClick = (g_key_file_get_integer (pSimpleKeyFile, "Behavior", "show_on_click", NULL) == 1);
 
441
        g_key_file_set_integer (pKeyFile, "Accessibility", "show_on_click", iShowOnClick);
262
442
        
263
443
        int iTaskbarType = g_key_file_get_integer (pSimpleKeyFile, "Behavior", "taskbar", NULL);
264
444
        if (iTaskbarType != s_iTaskbarType)
299
479
                }
300
480
        }
301
481
        
 
482
        // animations
 
483
        gsize length;
 
484
        gchar **cOnMouseHover = g_key_file_get_string_list (pSimpleKeyFile, "Behavior", "anim_hover", &length, NULL);
 
485
        gchar **cOnClick = g_key_file_get_string_list (pSimpleKeyFile, "Behavior", "anim_click", &length, NULL);
 
486
        int iEffectOnDisappearance = -1;
 
487
        if (g_key_file_has_key (pSimpleKeyFile, "Behavior", "anim_disappear", NULL))
 
488
                iEffectOnDisappearance = g_key_file_get_integer (pSimpleKeyFile, "Behavior", "anim_disappear", NULL);
 
489
        
 
490
        CairoDockModule *pModule;
 
491
        CairoDockModuleInstance *pModuleInstanceAnim = NULL;
 
492
        CairoDockModuleInstance *pModuleInstanceEffect = NULL;
 
493
        CairoDockModuleInstance *pModuleInstanceIllusion = NULL;
 
494
        
 
495
        if (cOnMouseHover && cOnMouseHover[0])
 
496
        {
 
497
                if (strcmp (cOnMouseHover[0], s_cHoverAnim) != 0)
 
498
                {
 
499
                        pModule = cairo_dock_find_module_from_name ("Animated icons");
 
500
                        if (pModule != NULL && pModule->pInstancesList != NULL)
 
501
                        {
 
502
                                pModuleInstanceAnim = pModule->pInstancesList->data;
 
503
                                cairo_dock_update_conf_file (pModuleInstanceAnim->cConfFilePath,
 
504
                                        G_TYPE_STRING, "Global", "hover effects", _get_animation_number (cOnMouseHover[0]),
 
505
                                        G_TYPE_INVALID);
 
506
                        }
 
507
                        g_free (s_cHoverAnim);
 
508
                        s_cHoverAnim = g_strdup (cOnMouseHover[0]);
 
509
                }
 
510
                if (cOnMouseHover[1] && strcmp (cOnMouseHover[1], s_cHoverEffect) != 0)
 
511
                {
 
512
                        pModule = cairo_dock_find_module_from_name ("icon effects");
 
513
                        if (pModule != NULL && pModule->pInstancesList != NULL)
 
514
                        {
 
515
                                pModuleInstanceEffect = pModule->pInstancesList->data;
 
516
                                cairo_dock_update_conf_file (pModuleInstanceEffect->cConfFilePath,
 
517
                                        G_TYPE_STRING, "Global", "effects", _get_effect_number (cOnMouseHover[1]),
 
518
                                        G_TYPE_INVALID);
 
519
                        }
 
520
                        g_free (s_cHoverEffect);
 
521
                        s_cHoverEffect = g_strdup (cOnMouseHover[1]);
 
522
                }
 
523
        }
 
524
        if (cOnClick && cOnClick[0])
 
525
        {
 
526
                if (strcmp (cOnClick[0], s_cClickAnim) != 0)
 
527
                {
 
528
                        pModule = cairo_dock_find_module_from_name ("Animated icons");
 
529
                        if (pModule != NULL && pModule->pInstancesList != NULL)
 
530
                        {
 
531
                                pModuleInstanceAnim = pModule->pInstancesList->data;
 
532
                                const gchar *cAnimation = _get_animation_number (cOnClick[0]);
 
533
                                cairo_dock_update_conf_file (pModuleInstanceAnim->cConfFilePath,
 
534
                                        G_TYPE_STRING, "Global", "click launchers", cAnimation,
 
535
                                        G_TYPE_STRING, "Global", "click applis", cAnimation,
 
536
                                        G_TYPE_STRING, "Global", "click applets", cAnimation,
 
537
                                        G_TYPE_INVALID);
 
538
                        }
 
539
                        g_free (s_cClickAnim);
 
540
                        s_cClickAnim = g_strdup (cOnClick[0]);
 
541
                }
 
542
                if (cOnClick[1] && strcmp (cOnClick[1], s_cClickEffect) != 0)
 
543
                {
 
544
                        pModule = cairo_dock_find_module_from_name ("icon effects");
 
545
                        if (pModule != NULL && pModule->pInstancesList != NULL)
 
546
                        {
 
547
                                pModuleInstanceEffect = pModule->pInstancesList->data;
 
548
                                const gchar *cAnimation = _get_effect_number (cOnClick[1]);
 
549
                                cairo_dock_update_conf_file (pModuleInstanceEffect->cConfFilePath,
 
550
                                        G_TYPE_STRING, "Global", "click launchers", cAnimation,
 
551
                                        G_TYPE_STRING, "Global", "click applis", cAnimation,
 
552
                                        G_TYPE_STRING, "Global", "click applets", cAnimation,
 
553
                                        G_TYPE_INVALID);
 
554
                        }
 
555
                        g_free (s_cClickEffect);
 
556
                        s_cClickEffect = g_strdup (cOnClick[1]);
 
557
                }
 
558
        }
 
559
        if (iEffectOnDisappearance != s_iEffectOnDisappearance)
 
560
        {
 
561
                pModule = cairo_dock_find_module_from_name ("illusion");
 
562
                if (pModule != NULL && pModule->pInstancesList != NULL)
 
563
                {
 
564
                        pModuleInstanceIllusion = pModule->pInstancesList->data;
 
565
                        cairo_dock_update_conf_file (pModuleInstanceIllusion->cConfFilePath,
 
566
                                G_TYPE_INT, "Global", "disappearance", iEffectOnDisappearance,
 
567
                                G_TYPE_INT, "Global", "appearance", iEffectOnDisappearance,
 
568
                                G_TYPE_INVALID);
 
569
                }
 
570
        }
 
571
        
 
572
        g_strfreev (cOnMouseHover);
 
573
        g_strfreev (cOnClick);
 
574
        
302
575
        // apparence
303
576
        gchar *cIconTheme = g_key_file_get_string (pSimpleKeyFile, "Appearance", "default icon directory", NULL);
304
577
        g_key_file_set_string (pKeyFile, "Icons", "default icon directory", cIconTheme);
312
585
                switch (iIconSize)
313
586
                {
314
587
                        case 0:  // tres petites
315
 
                                iLauncherSize = 42;
 
588
                                iLauncherSize = ICON_TINY;
316
589
                                fMaxScale = 2.2;
317
590
                                iIconGap = 5;
318
591
                                fReflectSize = .4;
319
592
                        break;
320
593
                        case 1:  // petites
321
 
                                iLauncherSize = 44;
 
594
                                iLauncherSize = ICON_SMALL;
322
595
                                fMaxScale = 2.;
323
596
                                iIconGap = 4;
324
597
                                fReflectSize = .4;
325
598
                        break;
326
599
                        case 2:  // moyennes
327
 
                                iLauncherSize = 48;
 
600
                                iLauncherSize = ICON_MEDIUM;
328
601
                                fMaxScale = 1.7;
329
602
                                iIconGap = 2;
330
603
                                fReflectSize = .5;
331
604
                        break;
332
605
                        case 3:  // grandes
333
606
                        default:
334
 
                                iLauncherSize = 52;
 
607
                                iLauncherSize = ICON_BIG;
335
608
                                fMaxScale = 1.5;
336
609
                                iIconGap = 2;
337
610
                                fReflectSize = .6;
338
611
                        break;
339
612
                        case 4:  // tres grandes
340
 
                                iLauncherSize = 56;
 
613
                                iLauncherSize = ICON_HUGE;
341
614
                                fMaxScale = 1.3;
342
615
                                iIconGap = 2;
343
616
                                fReflectSize = .6;
348
621
                g_key_file_set_integer_list (pKeyFile, "Icons", "launcher size", tab, 2);
349
622
                g_key_file_set_integer_list (pKeyFile, "Icons", "appli size", tab, 2);
350
623
                g_key_file_set_integer_list (pKeyFile, "Icons", "applet size", tab, 2);
351
 
                /// hauteur des separateurs ?...
 
624
                tab[0] = myIcons.tIconAuthorizedWidth[CAIRO_DOCK_SEPARATOR12];
 
625
                g_key_file_set_integer_list (pKeyFile, "Icons", "separator size", tab, 2);
 
626
                
352
627
                g_key_file_set_double (pKeyFile, "Icons", "zoom max", fMaxScale);
353
628
                g_key_file_set_double (pKeyFile, "Icons", "field depth", fReflectSize);
354
629
                g_key_file_set_integer (pKeyFile, "Icons", "icon gap", iIconGap);
382
657
        cd_reload ("TaskBar");
383
658
        cd_reload ("Icons");
384
659
        cd_reload ("Views");
 
660
        if (pModuleInstanceAnim != NULL)
 
661
        {
 
662
                cairo_dock_reload_module_instance (pModuleInstanceAnim, TRUE);
 
663
        }
 
664
        if (pModuleInstanceEffect != NULL)
 
665
        {
 
666
                cairo_dock_reload_module_instance (pModuleInstanceEffect, TRUE);
 
667
        }
 
668
        if (pModuleInstanceIllusion != NULL)
 
669
        {
 
670
                cairo_dock_reload_module_instance (pModuleInstanceIllusion, TRUE);
 
671
        }
385
672
        
386
673
        return TRUE;
387
674
}
391
678
        s_pSimpleConfigWindow = NULL;
392
679
}
393
680
 
 
681
static void _cairo_dock_add_one_animation_item (const gchar *cName, CairoDockAnimationRecord *pRecord, GtkListStore *pModele)
 
682
{
 
683
        GtkTreeIter iter;
 
684
        memset (&iter, 0, sizeof (GtkTreeIter));
 
685
        gtk_list_store_append (GTK_LIST_STORE (pModele), &iter);
 
686
        gtk_list_store_set (GTK_LIST_STORE (pModele), &iter,
 
687
                CAIRO_DOCK_MODEL_NAME, (pRecord && pRecord->cDisplayedName != NULL && *pRecord->cDisplayedName != '\0' ? pRecord->cDisplayedName : cName),
 
688
                CAIRO_DOCK_MODEL_RESULT, cName, -1);
 
689
}
 
690
static void _add_one_animation_item (const gchar *cName, CairoDockAnimationRecord *pRecord, GtkListStore *pModele)
 
691
{
 
692
        if (!pRecord->bIsEffect)
 
693
                _cairo_dock_add_one_animation_item (cName, pRecord, pModele);
 
694
}
 
695
static void _add_one_effect_item (const gchar *cName, CairoDockAnimationRecord *pRecord, GtkListStore *pModele)
 
696
{
 
697
        if (pRecord->bIsEffect)
 
698
                _cairo_dock_add_one_animation_item (cName, pRecord, pModele);
 
699
}
 
700
static void _make_double_anim_widget (GtkWidget *pSimpleConfigWindow, GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cKeyName, const gchar *cLabel)
 
701
{
 
702
        CairoDockGroupKeyWidget *myWidget = cairo_dock_gui_find_group_key_widget (pSimpleConfigWindow, cGroupName, cKeyName);
 
703
        g_return_if_fail (myWidget != NULL);
 
704
        
 
705
        gsize length = 0;
 
706
        gchar **cValues = g_key_file_get_string_list (pKeyFile, cGroupName, cKeyName, &length, NULL);
 
707
        
 
708
        GtkWidget *box = gtk_hbox_new (FALSE, CAIRO_DOCK_GUI_MARGIN);
 
709
        gtk_box_pack_end (GTK_BOX (myWidget->pKeyBox), box, FALSE, FALSE, 0);
 
710
        
 
711
        GtkWidget *pLabel = gtk_label_new (_("Animation:"));
 
712
        gtk_box_pack_start (GTK_BOX (box), pLabel, FALSE, FALSE, 0);
 
713
        
 
714
        GtkWidget *pOneWidget = cairo_dock_gui_make_combo (FALSE);
 
715
        GtkTreeModel *modele = gtk_combo_box_get_model (GTK_COMBO_BOX (pOneWidget));
 
716
        _cairo_dock_add_one_animation_item ("", NULL, GTK_LIST_STORE (modele));
 
717
        cairo_dock_foreach_animation ((GHFunc) _add_one_animation_item, modele);
 
718
        gtk_box_pack_start (GTK_BOX (box), pOneWidget, FALSE, FALSE, 0);
 
719
        cairo_dock_gui_select_in_combo (pOneWidget, cValues[0]);
 
720
        myWidget->pSubWidgetList = g_slist_append (myWidget->pSubWidgetList, pOneWidget);
 
721
        
 
722
        if (g_bUseOpenGL)
 
723
        {
 
724
                pLabel = gtk_vseparator_new ();
 
725
                gtk_widget_set_size_request (pLabel, 20, 1);
 
726
                gtk_box_pack_start (GTK_BOX (box), pLabel, FALSE, FALSE, 0);
 
727
                
 
728
                pLabel = gtk_label_new (_("Effects:"));
 
729
                gtk_box_pack_start (GTK_BOX (box), pLabel, FALSE, FALSE, 0);
 
730
                
 
731
                pOneWidget = cairo_dock_gui_make_combo (FALSE);
 
732
                modele = gtk_combo_box_get_model (GTK_COMBO_BOX (pOneWidget));
 
733
                _cairo_dock_add_one_animation_item ("", NULL, GTK_LIST_STORE (modele));
 
734
                cairo_dock_foreach_animation ((GHFunc) _add_one_effect_item, modele);
 
735
                gtk_box_pack_start (GTK_BOX (box), pOneWidget, FALSE, FALSE, 0);
 
736
                cairo_dock_gui_select_in_combo (pOneWidget, cValues[1]);
 
737
                myWidget->pSubWidgetList = g_slist_append (myWidget->pSubWidgetList, pOneWidget);
 
738
        }
 
739
        g_strfreev (cValues);
 
740
}
 
741
static void _make_widgets (GtkWidget *pSimpleConfigWindow, GKeyFile *pKeyFile)
 
742
{
 
743
        _make_double_anim_widget (pSimpleConfigWindow, pKeyFile, "Behavior", "anim_hover", _("On mouse hover:"));
 
744
        _make_double_anim_widget (pSimpleConfigWindow, pKeyFile, "Behavior", "anim_click", _("On click:"));
 
745
}
 
746
 
 
747
 
394
748
static GtkWidget * show_main_gui (void)
395
749
{
396
750
        if (s_pSimpleConfigWindow != NULL)
403
757
        gchar *cConfFilePath = _make_simple_conf_file ();
404
758
        
405
759
        //\_____________ On construit la fenetre.
406
 
        cairo_dock_build_generic_gui (cConfFilePath,
 
760
        s_pSimpleConfigWindow = cairo_dock_build_generic_gui_full (cConfFilePath,
407
761
                NULL,
408
 
                _("Configuration of Cairo-Dock"),
 
762
                _("Cairo-Dock configuration"),
409
763
                CAIRO_DOCK_SIMPLE_PANEL_WIDTH, CAIRO_DOCK_SIMPLE_PANEL_HEIGHT,
410
764
                (CairoDockApplyConfigFunc) on_apply_config_simple,
411
765
                NULL,
412
766
                (GFreeFunc) on_destroy_config_simple,
413
 
                &s_pSimpleConfigWindow);
 
767
                _make_widgets,
 
768
                NULL/**_save_widgets*/);
414
769
        
415
770
        //\_____________ On ajoute un bouton "mode avance".
416
771
        GtkWidget *pMainVBox = gtk_bin_get_child (GTK_BIN (s_pSimpleConfigWindow));
425
780
                0);
426
781
        gtk_box_reorder_child (GTK_BOX (pButtonsHBox), pSwitchButton, 1);
427
782
        gtk_widget_show_all (pSwitchButton);
 
783
        
 
784
        //\_____________ Petit message la 1ere fois.
 
785
        gchar *cModeFile = g_strdup_printf ("%s/%s", g_cCairoDockDataDir, ".config-mode");
 
786
        if (! g_file_test (cModeFile, G_FILE_TEST_EXISTS))
 
787
        {
 
788
                g_file_set_contents (cModeFile,
 
789
                        "0",
 
790
                        -1,
 
791
                        NULL);
 
792
                Icon *pIcon = cairo_dock_get_current_active_icon ();
 
793
                if (pIcon == NULL || pIcon->cParentDockName == NULL || cairo_dock_icon_is_being_removed (pIcon))
 
794
                        pIcon = cairo_dock_get_dialogless_icon ();
 
795
                CairoDock *pDock = cairo_dock_search_dock_from_name (pIcon != NULL ? pIcon->cParentDockName : NULL);
 
796
                cairo_dock_show_temporary_dialog_with_default_icon (_("This is the simple configuration panel of Cairo-Dock.\n After you get familiar with it, and if you want to customise your theme\n, you can switch to an advanced mode.\n You can switch from a mode to another at any time."), pIcon, CAIRO_CONTAINER (pDock), 15000);
 
797
        }
 
798
        g_free (cModeFile);
 
799
        
428
800
        return s_pSimpleConfigWindow;
429
801
}
430
802
 
431
803
 
432
804
static gboolean on_apply_config_module_simple (gpointer data)
433
805
{
434
 
        g_print ("%s (%s)\n", __func__, s_cCurrentModuleName);
 
806
        cd_debug ("%s (%s)\n", __func__, s_cCurrentModuleName);
435
807
        CairoDockModule *pModule = cairo_dock_find_module_from_name (s_cCurrentModuleName);
436
808
        if (pModule != NULL)
437
809
        {
473
845
        g_object_set_data (G_OBJECT (pWindow), "conf-file", g_strdup (cConfFilePath));
474
846
        g_object_set_data (G_OBJECT (pWindow), "widget-list", pWidgetList);
475
847
        g_object_set_data (G_OBJECT (pWindow), "garbage", pDataGarbage);
 
848
        if (pInstance != NULL)
 
849
                g_object_set_data (G_OBJECT (pWindow), "module", (gpointer)pInstance->pModule->pVisitCard->cModuleName);
476
850
        
477
851
        if (pInstance != NULL && pInstance->pModule->pInterface->load_custom_widget != NULL)
478
852
                pInstance->pModule->pInterface->load_custom_widget (pInstance, pKeyFile);
628
1002
{
629
1003
        gchar *cResult = NULL;
630
1004
        gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_RESULT, &cResult, -1);
631
 
        g_print ("- %s !\n", cResult
 
1005
        cd_debug ("- %s !\n", cResult
632
1006
        );
633
1007
        if (cResult && strcmp (data[0], cResult) == 0)
634
1008
        {
654
1028
        GSList *pCurrentWidgetList = g_object_get_data (G_OBJECT (s_pSimpleConfigWindow), "widget-list");
655
1029
        g_return_if_fail (pCurrentWidgetList != NULL);
656
1030
        
657
 
        GSList *pWidgetList = cairo_dock_find_widgets_from_name (pCurrentWidgetList, "Add-ons", "modules");
658
 
        g_return_if_fail (pWidgetList != NULL);
 
1031
        CairoDockGroupKeyWidget *pGroupKeyWidget = cairo_dock_gui_find_group_key_widget_in_list (pCurrentWidgetList, "Add-ons", "modules");
 
1032
        g_return_if_fail (pGroupKeyWidget != NULL && pGroupKeyWidget->pSubWidgetList != NULL);
659
1033
        
660
 
        GtkWidget *pTreeView = pWidgetList->data;
 
1034
        GtkWidget *pTreeView = pGroupKeyWidget->pSubWidgetList->data;
661
1035
        
662
1036
        GtkTreeModel *pModele = gtk_tree_view_get_model (GTK_TREE_VIEW (pTreeView));
663
1037
        gboolean bFound = FALSE;
673
1047
        }
674
1048
}
675
1049
 
676
 
static GSList *get_widgets_from_name (const gchar *cGroupName, const gchar *cKeyName)
 
1050
static CairoDockGroupKeyWidget *get_widget_from_name (const gchar *cGroupName, const gchar *cKeyName)
677
1051
{
678
1052
        g_return_val_if_fail (s_pSimpleConfigModuleWindow != NULL, NULL);
679
 
        GSList *pCurrentModuleWidgetList = g_object_get_data (G_OBJECT (s_pSimpleConfigModuleWindow), "widget-list");
680
 
        g_return_val_if_fail (pCurrentModuleWidgetList != NULL, NULL);
681
 
        return cairo_dock_find_widgets_from_name (pCurrentModuleWidgetList, cGroupName, cKeyName);
 
1053
        return cairo_dock_gui_find_group_key_widget (s_pSimpleConfigModuleWindow, cGroupName, cKeyName);
682
1054
}
683
1055
 
684
1056
static void close_gui (void)
723
1095
        pBackend->set_status_message_on_gui = set_status_message_on_gui;
724
1096
        pBackend->module_is_opened                      = module_is_opened;
725
1097
        pBackend->deactivate_module_in_gui      = deactivate_module_in_gui;
726
 
        pBackend->get_widgets_from_name         = get_widgets_from_name;
 
1098
        pBackend->get_widget_from_name          = get_widget_from_name;
727
1099
        pBackend->close_gui                             = close_gui;
728
1100
        
729
1101
        cairo_dock_register_gui_backend (pBackend);