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/>.
22
#define __USE_XOPEN_EXTENDED
24
#include <glib/gstdio.h>
25
#include <glib/gi18n.h>
27
#include "../config.h"
28
#include "cairo-dock-struct.h"
29
#include "cairo-dock-modules.h"
30
#include "cairo-dock-log.h"
31
#include "cairo-dock-gui-factory.h"
32
#include "cairo-dock-keyfile-utilities.h"
33
#include "cairo-dock-animations.h"
34
#include "cairo-dock-draw.h"
35
#include "cairo-dock-dialog-manager.h"
36
#include "cairo-dock-dock-manager.h"
37
#include "cairo-dock-container.h"
38
#include "cairo-dock-applications-manager.h"
39
#include "cairo-dock-launcher-factory.h"
40
#include "cairo-dock-load.h"
41
#include "cairo-dock-internal-accessibility.h"
42
#include "cairo-dock-desktop-file-factory.h"
43
#include "cairo-dock-gui-manager.h"
45
#define CAIRO_DOCK_FRAME_MARGIN 6
47
extern CairoDock *g_pMainDock;
48
extern gchar *g_cCairoDockDataDir;
50
static CairoDockGuiBackend *s_pGuiBackend = NULL;
51
static CairoDockLauncherGuiBackend *s_pLauncherGuiBackend = NULL;
53
//////////////////////////
54
// MAIN DOCK VISIBILITY //
55
//////////////////////////
57
static int iNbConfigDialogs = 0;
58
int cairo_dock_get_nb_dialog_windows (void)
60
return iNbConfigDialogs;
63
void cairo_dock_dialog_window_destroyed (void)
65
/**iNbConfigDialogs --;
66
if (iNbConfigDialogs <= 0)
69
if (g_pMainDock != NULL) // peut arriver au 1er lancement.
70
cairo_dock_pop_down (g_pMainDock);
72
//g_print ("iNbConfigDialogs <- %d\n", iNbConfigDialogs);
75
void cairo_dock_dialog_window_created (void)
77
/**iNbConfigDialogs ++;
78
//g_print ("iNbConfigDialogs <- %d\n", iNbConfigDialogs);
79
if (g_pMainDock != NULL && cairo_dock_search_window_covering_dock (g_pMainDock, FALSE, TRUE) == NULL) // peut etre NULL au 1er lancement.
80
cairo_dock_pop_up (g_pMainDock);*/
84
//////////////////////////
85
// DYNAMIC CONFIG PANEL //
86
//////////////////////////
88
CairoDockGroupKeyWidget *cairo_dock_get_group_key_widget_from_name (const gchar *cGroupName, const gchar *cKeyName)
90
if (s_pGuiBackend && s_pGuiBackend->get_widget_from_name)
92
return s_pGuiBackend->get_widget_from_name (cGroupName, cKeyName);
97
GtkWidget *cairo_dock_get_widget_from_name (const gchar *cGroupName, const gchar *cKeyName)
99
CairoDockGroupKeyWidget *pGroupKeyWidget = cairo_dock_get_group_key_widget_from_name (cGroupName, cKeyName);
100
if (pGroupKeyWidget != NULL && pGroupKeyWidget->pSubWidgetList != NULL)
101
return pGroupKeyWidget->pSubWidgetList->data;
105
void cairo_dock_reload_current_module_widget_full (CairoDockModuleInstance *pInstance, int iShowPage)
107
g_return_if_fail (pInstance != NULL);
108
if (pInstance->pModule->pVisitCard->cInternalModule != NULL)
110
cairo_dock_show_module_gui (pInstance->pModule->pVisitCard->cInternalModule);
114
cairo_dock_show_module_instance_gui (pInstance, iShowPage);
116
/**g_return_if_fail (s_pCurrentGroupWidget != NULL && s_pCurrentGroup != NULL && cairo_dock_get_current_widget_list () != NULL);
118
int iNotebookPage = (GTK_IS_NOTEBOOK (s_pCurrentGroupWidget) ?
121
gtk_notebook_get_current_page (GTK_NOTEBOOK (s_pCurrentGroupWidget))) :
124
gtk_widget_destroy (s_pCurrentGroupWidget);
125
s_pCurrentGroupWidget = NULL;
127
cairo_dock_reset_current_widget_list ();
129
CairoDockModule *pModule = cairo_dock_find_module_from_name (s_pCurrentGroup->cGroupName);
133
pWidget = cairo_dock_present_group_widget (pModule->cConfFilePath, s_pCurrentGroup, FALSE, pInstance);
137
pWidget = cairo_dock_present_group_widget (g_cConfFile, s_pCurrentGroup, TRUE, NULL);
139
if (iNotebookPage != -1)
141
gtk_notebook_set_current_page (GTK_NOTEBOOK (s_pCurrentGroupWidget), iNotebookPage);
146
void cairo_dock_deactivate_module_in_gui (const gchar *cModuleName)
148
if (s_pGuiBackend && s_pGuiBackend->deactivate_module_in_gui)
149
s_pGuiBackend->deactivate_module_in_gui (cModuleName);
152
static gboolean _cairo_dock_module_is_opened (CairoDockModuleInstance *pModuleInstance)
154
if (s_pGuiBackend && s_pGuiBackend->module_is_opened)
155
return s_pGuiBackend->module_is_opened (pModuleInstance);
160
void cairo_dock_update_desklet_size_in_gui (CairoDockModuleInstance *pModuleInstance, int iWidth, int iHeight)
162
if (_cairo_dock_module_is_opened (pModuleInstance)) // on est en train d'editer ce module dans le panneau de conf.
164
CairoDockGroupKeyWidget *pGroupKeyWidget = cairo_dock_get_group_key_widget_from_name ("Desklet", "size");
165
GtkWidget *pOneWidget;
167
if (pGroupKeyWidget != NULL && pGroupKeyWidget->pSubWidgetList)
169
pOneWidget = pGroupKeyWidget->pSubWidgetList->data;
170
g_signal_handlers_block_matched (pOneWidget,
171
(GSignalMatchType) G_SIGNAL_MATCH_FUNC,
172
0, 0, NULL, _cairo_dock_set_value_in_pair, NULL);
173
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pOneWidget), iWidth);
174
g_signal_handlers_unblock_matched (pOneWidget,
175
(GSignalMatchType) G_SIGNAL_MATCH_FUNC,
176
0, 0, NULL, _cairo_dock_set_value_in_pair, NULL);
178
if (pGroupKeyWidget->pSubWidgetList->next != NULL)
180
pOneWidget = pGroupKeyWidget->pSubWidgetList->next->data;
181
g_signal_handlers_block_matched (pOneWidget,
182
(GSignalMatchType) G_SIGNAL_MATCH_FUNC,
183
0, 0, NULL, _cairo_dock_set_value_in_pair, NULL);
184
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pOneWidget), iHeight);
185
g_signal_handlers_unblock_matched (pOneWidget,
186
(GSignalMatchType) G_SIGNAL_MATCH_FUNC,
187
0, 0, NULL, _cairo_dock_set_value_in_pair, NULL);
194
void cairo_dock_update_desklet_position_in_gui (CairoDockModuleInstance *pModuleInstance, int x, int y)
196
if (_cairo_dock_module_is_opened (pModuleInstance)) // on est en train d'editer ce module dans le panneau de conf.
198
GtkWidget *pOneWidget;
199
pOneWidget = cairo_dock_get_widget_from_name ("Desklet", "x position");
200
if (pOneWidget != NULL)
201
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pOneWidget), x);
202
pOneWidget = cairo_dock_get_widget_from_name ("Desklet", "y position");
203
if (pOneWidget != NULL)
204
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pOneWidget), y);
208
void cairo_dock_update_desklet_detached_state_in_gui (CairoDockModuleInstance *pModuleInstance, gboolean bIsDetached)
210
if (_cairo_dock_module_is_opened (pModuleInstance)) // on est en train d'editer ce module dans le panneau de conf.
212
GtkWidget *pOneWidget = cairo_dock_get_widget_from_name ("Desklet", "initially detached");
213
if (pOneWidget != NULL)
214
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pOneWidget), bIsDetached);
219
void cairo_dock_set_status_message (GtkWidget *pWindow, const gchar *cMessage)
221
g_print ("%s (%s)\n", __func__, cMessage);
222
GtkWidget *pStatusBar;
225
pStatusBar = g_object_get_data (G_OBJECT (pWindow), "status-bar");
226
if (pStatusBar == NULL)
228
//g_print ("%s (%s sur %x/%x)\n", __func__, cMessage, pWindow, pStatusBar);
229
gtk_statusbar_pop (GTK_STATUSBAR (pStatusBar), 0); // clear any previous message, underflow is allowed.
230
gtk_statusbar_push (GTK_STATUSBAR (pStatusBar), 0, cMessage);
234
if (s_pGuiBackend && s_pGuiBackend->set_status_message_on_gui)
235
s_pGuiBackend->set_status_message_on_gui (cMessage);
239
void cairo_dock_set_status_message_printf (GtkWidget *pWindow, const gchar *cFormat, ...)
241
g_return_if_fail (cFormat != NULL);
243
va_start (args, cFormat);
244
gchar *cMessage = g_strdup_vprintf (cFormat, args);
245
cairo_dock_set_status_message (pWindow, cMessage);
255
void cairo_dock_register_gui_backend (CairoDockGuiBackend *pBackend)
257
g_free (s_pGuiBackend);
258
s_pGuiBackend = pBackend;
261
GtkWidget *cairo_dock_show_main_gui (void)
263
GtkWidget *pWindow = NULL;
264
if (s_pGuiBackend && s_pGuiBackend->show_main_gui)
265
pWindow = s_pGuiBackend->show_main_gui ();
266
if (pWindow && g_pMainDock != NULL) // evitons d'empieter sur le main dock.
268
if (g_pMainDock->container.bIsHorizontal)
270
if (g_pMainDock->container.bDirectionUp)
271
gtk_window_move (GTK_WINDOW (pWindow), 0, 0);
273
gtk_window_move (GTK_WINDOW (pWindow), 0, g_pMainDock->iMinDockHeight+10);
277
if (g_pMainDock->container.bDirectionUp)
278
gtk_window_move (GTK_WINDOW (pWindow), 0, 0);
280
gtk_window_move (GTK_WINDOW (pWindow), g_pMainDock->iMinDockHeight+10, 0);
287
void cairo_dock_show_module_instance_gui (CairoDockModuleInstance *pModuleInstance, int iShowPage)
289
if (s_pGuiBackend && s_pGuiBackend->show_module_instance_gui)
290
s_pGuiBackend->show_module_instance_gui (pModuleInstance, iShowPage);
293
void cairo_dock_show_module_gui (const gchar *cModuleName)
295
if (s_pGuiBackend && s_pGuiBackend->show_module_gui)
296
s_pGuiBackend->show_module_gui (cModuleName);
299
void cairo_dock_close_gui (void)
301
if (s_pGuiBackend && s_pGuiBackend->close_gui)
302
s_pGuiBackend->close_gui ();
310
static gboolean on_delete_generic_gui (GtkWidget *pWidget, GdkEvent *event, GMainLoop *pBlockingLoop)
312
cd_debug ("%s ()\n", __func__);
313
if (pBlockingLoop != NULL && g_main_loop_is_running (pBlockingLoop))
315
g_main_loop_quit (pBlockingLoop);
318
gpointer pUserData = g_object_get_data (G_OBJECT (pWidget), "action-data");
319
GFreeFunc pFreeUserData = g_object_get_data (G_OBJECT (pWidget), "free-data");
320
if (pFreeUserData != NULL)
321
pFreeUserData (pUserData);
323
GSList *pWidgetList = g_object_get_data (G_OBJECT (pWidget), "widget-list");
324
cairo_dock_free_generated_widget_list (pWidgetList);
326
GPtrArray *pDataGarbage = g_object_get_data (G_OBJECT (pWidget), "garbage");
329
gchar *cConfFilePath = g_object_get_data (G_OBJECT (pWidget), "conf-file");
330
g_free (cConfFilePath);
332
cairo_dock_dialog_window_destroyed ();
334
return (pBlockingLoop != NULL); // TRUE <=> ne pas detruire la fenetre.
337
static void on_click_generic_apply (GtkButton *button, GtkWidget *pWindow)
339
//g_print ("%s ()\n", __func__);
340
GSList *pWidgetList = g_object_get_data (G_OBJECT (pWindow), "widget-list");
341
gchar *cConfFilePath = g_object_get_data (G_OBJECT (pWindow), "conf-file");
342
GKeyFile *pKeyFile = cairo_dock_open_key_file (cConfFilePath);
343
g_return_if_fail (pKeyFile != NULL);
345
gchar *cConfModuleName = g_object_get_data (G_OBJECT (pWindow), "module");
346
if (cConfModuleName != NULL)
348
CairoDockModule *pModule = cairo_dock_find_module_from_name (cConfModuleName);
351
CairoDockModuleInstance *pModuleInstance;
353
for (i = pModule->pInstancesList; i != NULL; i = i->next)
355
pModuleInstance = i->data;
356
if (strcmp (cConfFilePath, pModuleInstance->cConfFilePath) == 0)
361
if (pModule->pInterface->save_custom_widget != NULL)
362
pModule->pInterface->save_custom_widget (pModuleInstance, pKeyFile);
368
CairoDockSaveCustomWidgetFunc save_custom_widgets = g_object_get_data (G_OBJECT (pWindow), "save-widget");
369
if (save_custom_widgets)
370
save_custom_widgets (pWindow, pKeyFile);
373
cairo_dock_update_keyfile_from_widget_list (pKeyFile, pWidgetList);
374
cairo_dock_write_keys_to_file (pKeyFile, cConfFilePath);
375
g_key_file_free (pKeyFile);
377
CairoDockApplyConfigFunc pAction = g_object_get_data (G_OBJECT (pWindow), "action");
378
gpointer pUserData = g_object_get_data (G_OBJECT (pWindow), "action-data");
382
gboolean bKeepWindow = pAction (pUserData);
383
if (!bKeepWindow) // on recharge la fenetre.
385
cairo_dock_reload_generic_gui (pWindow);
389
g_object_set_data (G_OBJECT (pWindow), "result", GINT_TO_POINTER (1));
392
static void on_click_generic_quit (GtkButton *button, GtkWidget *pWindow)
394
cd_debug ("%s ()\n", __func__);
395
GMainLoop *pBlockingLoop = g_object_get_data (G_OBJECT (pWindow), "loop");
398
g_signal_emit_by_name (pWindow, "delete-event", NULL, &bReturn);
399
///on_delete_generic_gui (pWindow, NULL, pBlockingLoop);
401
if (pBlockingLoop == NULL)
402
gtk_widget_destroy (pWindow);
405
static void on_click_generic_ok (GtkButton *button, GtkWidget *pWindow)
407
//g_print ("%s ()\n", __func__);
409
on_click_generic_apply (button, pWindow);
410
on_click_generic_quit (button, pWindow);
413
GtkWidget *cairo_dock_build_generic_gui_window (const gchar *cTitle, int iWidth, int iHeight, CairoDockApplyConfigFunc pAction, gpointer pUserData, GFreeFunc pFreeUserData)
415
//\_____________ On construit la fenetre.
416
GtkWidget *pMainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
417
gtk_window_set_icon_from_file (GTK_WINDOW (pMainWindow), CAIRO_DOCK_SHARE_DATA_DIR"/"CAIRO_DOCK_ICON, NULL);
419
gtk_window_set_title (GTK_WINDOW (pMainWindow), cTitle);
421
GtkWidget *pMainVBox = gtk_vbox_new (FALSE, CAIRO_DOCK_FRAME_MARGIN);
422
gtk_container_add (GTK_CONTAINER (pMainWindow), pMainVBox);
424
//\_____________ On ajoute les boutons.
425
GtkWidget *pButtonsHBox = gtk_hbox_new (FALSE, CAIRO_DOCK_FRAME_MARGIN*2);
426
gtk_box_pack_end (GTK_BOX (pMainVBox),
432
GtkWidget *pQuitButton = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
433
g_signal_connect (G_OBJECT (pQuitButton), "clicked", G_CALLBACK(on_click_generic_quit), pMainWindow);
434
gtk_box_pack_end (GTK_BOX (pButtonsHBox),
442
GtkWidget *pApplyButton = gtk_button_new_from_stock (GTK_STOCK_APPLY);
443
g_signal_connect (G_OBJECT (pApplyButton), "clicked", G_CALLBACK(on_click_generic_apply), pMainWindow);
444
gtk_box_pack_end (GTK_BOX (pButtonsHBox),
452
GtkWidget *pApplyButton = gtk_button_new_from_stock (GTK_STOCK_OK);
453
g_signal_connect (G_OBJECT (pApplyButton), "clicked", G_CALLBACK(on_click_generic_ok), pMainWindow);
454
gtk_box_pack_end (GTK_BOX (pButtonsHBox),
461
//\_____________ On ajoute la barre d'etat a la fin.
462
GtkWidget *pStatusBar = gtk_statusbar_new ();
463
gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (pStatusBar), FALSE);
464
gtk_box_pack_start (GTK_BOX (pButtonsHBox), // pMainVBox
469
g_object_set_data (G_OBJECT (pMainWindow), "status-bar", pStatusBar);
471
gtk_window_resize (GTK_WINDOW (pMainWindow), iWidth, iHeight);
473
gtk_widget_show_all (pMainWindow);
474
cairo_dock_dialog_window_created ();
479
g_object_set_data (G_OBJECT (pMainWindow), "action", pAction);
480
g_object_set_data (G_OBJECT (pMainWindow), "action-data", pUserData);
481
g_object_set_data (G_OBJECT (pMainWindow), "free-data", pFreeUserData);
482
g_signal_connect (G_OBJECT (pMainWindow),
484
G_CALLBACK (on_delete_generic_gui),
490
GtkWidget *cairo_dock_build_generic_gui_full (const gchar *cConfFilePath, const gchar *cGettextDomain, const gchar *cTitle, int iWidth, int iHeight, CairoDockApplyConfigFunc pAction, gpointer pUserData, GFreeFunc pFreeUserData, CairoDockLoadCustomWidgetFunc load_custom_widgets, CairoDockSaveCustomWidgetFunc save_custom_widgets)
492
//\_____________ On construit la fenetre.
493
GtkWidget *pMainWindow = cairo_dock_build_generic_gui_window (cTitle, iWidth, iHeight, pAction, pUserData, pFreeUserData);
495
//\_____________ On construit l'IHM du fichier de conf.
496
GKeyFile* pKeyFile = cairo_dock_open_key_file (cConfFilePath);
498
GtkWidget *pNoteBook = NULL;
499
GSList *pWidgetList = NULL;
500
GPtrArray *pDataGarbage = g_ptr_array_new ();
501
if (pKeyFile != NULL)
503
pNoteBook = cairo_dock_build_key_file_widget (pKeyFile,
511
g_object_set_data (G_OBJECT (pMainWindow), "conf-file", g_strdup (cConfFilePath));
512
g_object_set_data (G_OBJECT (pMainWindow), "widget-list", pWidgetList);
513
g_object_set_data (G_OBJECT (pMainWindow), "garbage", pDataGarbage);
514
g_object_set_data (G_OBJECT (pMainWindow), "save-widget", save_custom_widgets);
515
g_object_set_data (G_OBJECT (pMainWindow), "load-widget", load_custom_widgets);
517
if (load_custom_widgets) // a faire apres avoir mis "widget-list".
518
load_custom_widgets (pMainWindow, pKeyFile);
520
g_key_file_free (pKeyFile);
522
//\_____________ On l'insere dans la fenetre.
523
GtkWidget *pMainVBox = gtk_bin_get_child (GTK_BIN (pMainWindow));
524
gtk_box_pack_start (GTK_BOX (pMainVBox),
529
gtk_widget_show_all (pMainWindow);
532
if (pAction == NULL) // on bloque.
534
GList *children = gtk_container_get_children (GTK_CONTAINER (pMainVBox));
535
GList *w = g_list_last (children);
536
g_return_val_if_fail (w != NULL, FALSE);
537
GtkWidget *pButtonsHBox = w->data;
539
GtkWidget *pOkButton = gtk_button_new_from_stock (GTK_STOCK_OK);
540
g_signal_connect (G_OBJECT (pOkButton), "clicked", G_CALLBACK(on_click_generic_ok), pMainWindow);
541
gtk_box_pack_end (GTK_BOX (pButtonsHBox),
547
gtk_window_set_modal (GTK_WINDOW (pMainWindow), TRUE);
548
GMainLoop *pBlockingLoop = g_main_loop_new (NULL, FALSE);
549
g_object_set_data (G_OBJECT (pMainWindow), "loop", pBlockingLoop);
550
g_signal_connect (G_OBJECT (pMainWindow),
552
G_CALLBACK (on_delete_generic_gui),
555
cd_debug ("debut de boucle bloquante ...\n");
556
GDK_THREADS_LEAVE ();
557
g_main_loop_run (pBlockingLoop);
558
GDK_THREADS_ENTER ();
559
cd_debug ("fin de boucle bloquante\n");
561
g_main_loop_unref (pBlockingLoop);
562
g_object_set_data (G_OBJECT (pMainWindow), "loop", NULL);
564
iResult = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (pMainWindow), "result"));
565
cd_debug ("iResult : %d", iResult);
566
gtk_widget_destroy (pMainWindow);
573
void cairo_dock_reload_generic_gui (GtkWidget *pWindow)
575
//g_print ("%s ()", __func__);
576
GSList *pWidgetList = g_object_get_data (G_OBJECT (pWindow), "widget-list");
577
cairo_dock_free_generated_widget_list (pWidgetList);
579
g_object_set_data (G_OBJECT (pWindow), "widget-list", NULL);
581
GPtrArray *pDataGarbage = g_object_get_data (G_OBJECT (pWindow), "garbage");
583
g_object_set_data (G_OBJECT (pWindow), "garbage", NULL);
585
GtkWidget *pMainVBox = gtk_bin_get_child (GTK_BIN (pWindow));
586
GList *children = gtk_container_get_children (GTK_CONTAINER (pMainVBox));
587
g_return_if_fail (children != NULL);
588
GtkWidget *pNoteBook = children->data;
589
gtk_widget_destroy (pNoteBook);
591
gchar *cConfFilePath = g_object_get_data (G_OBJECT (pWindow), "conf-file");
592
GKeyFile* pKeyFile = cairo_dock_open_key_file (cConfFilePath);
593
if (pKeyFile != NULL)
595
pNoteBook = cairo_dock_build_key_file_widget (pKeyFile,
603
g_object_set_data (G_OBJECT (pWindow), "widget-list", pWidgetList);
604
g_object_set_data (G_OBJECT (pWindow), "garbage", pDataGarbage);
606
CairoDockLoadCustomWidgetFunc load_custom_widgets = g_object_get_data (G_OBJECT (pWindow), "load-widget");
607
if (load_custom_widgets) // a faire apres avoir mis "widget-list".
608
load_custom_widgets (pWindow, pKeyFile);
610
g_key_file_free (pKeyFile);
612
gtk_box_pack_start (GTK_BOX (pMainVBox),
617
gtk_widget_show_all (pNoteBook);
621
//////////////////////////
622
// LAUNCHER GUI BACKEND //
623
//////////////////////////
625
void cairo_dock_register_launcher_gui_backend (CairoDockLauncherGuiBackend *pBackend)
627
g_free (s_pLauncherGuiBackend);
628
s_pLauncherGuiBackend = pBackend;
631
GtkWidget *cairo_dock_build_launcher_gui (Icon *pIcon)
633
if (s_pLauncherGuiBackend && s_pLauncherGuiBackend->show_gui)
634
s_pLauncherGuiBackend->show_gui (pIcon);
637
static guint s_iSidRefreshGUI = 0;
638
static gboolean _refresh_launcher_gui (gpointer data)
640
if (s_pLauncherGuiBackend && s_pLauncherGuiBackend->refresh_gui)
641
s_pLauncherGuiBackend->refresh_gui ();
643
s_iSidRefreshGUI = 0;
646
void cairo_dock_trigger_refresh_launcher_gui (void)
648
if (s_iSidRefreshGUI != 0)
651
s_iSidRefreshGUI = g_idle_add ((GSourceFunc) _refresh_launcher_gui, NULL);