113
gboolean cd_dbus_main_show_desklet(dbusMainObject *pDbusCallback, gboolean *widgetLayer, GError **error)
115
if (! myConfig.bEnableDesklets)
117
if (dbus_deskletVisible)
119
cairo_dock_set_desklets_visibility_to_default ();
120
cairo_dock_show_xwindow (dbus_xLastActiveWindow);
124
dbus_xLastActiveWindow = cairo_dock_get_current_active_window ();
125
cairo_dock_set_all_desklets_visible (widgetLayer != NULL ? *widgetLayer : FALSE);
127
dbus_deskletVisible = !dbus_deskletVisible;
131
static void _show_hide_one_dock (const gchar *cDockName, CairoDock *pDock, gpointer data)
133
if (pDock->iRefCount != 0)
135
gboolean bShow = GPOINTER_TO_INT (data);
138
///cairo_dock_pop_up (pDock);
139
if (pDock->bAutoHide)
140
cairo_dock_emit_enter_signal (CAIRO_CONTAINER (pDock));
144
///cairo_dock_pop_down (pDock); // ne fait rien s'il n'etait pas "popped".
145
if (pDock->bAutoHide)
146
cairo_dock_emit_leave_signal (CAIRO_CONTAINER (pDock));
149
gboolean cd_dbus_main_show_dock (dbusMainObject *pDbusCallback, gboolean bShow, GError **error)
151
if (! myConfig.bEnableShowDock)
155
cairo_dock_stop_quick_hide ();
157
cairo_dock_foreach_docks ((GHFunc) _show_hide_one_dock, GINT_TO_POINTER (bShow));
160
cairo_dock_quick_hide_all_docks ();
165
gboolean cd_dbus_main_create_launcher_from_scratch (dbusMainObject *pDbusCallback, const gchar *cIconFile, const gchar *cLabel, const gchar *cCommand, const gchar *cParentDockName, GError **error)
167
if (! myConfig.bEnableCreateLauncher)
170
nullify_argument (cParentDockName);
171
if (cParentDockName == NULL)
172
cParentDockName = CAIRO_DOCK_MAIN_DOCK_NAME;
185
const gchar *cCommand;
187
const gchar *cContainerName;
189
const gchar *cDesktopFile;
190
const gchar *cModuleName;
193
GList *pMatchingIcons;
195
static inline gboolean _strings_match (const gchar *q, const gchar *p) // query, parameter
198
return (strcmp (q, "none") == 0);
200
if (n != 0 && q[n-1] == '*') // ok with UTF-8 too.
201
return (strncmp (q, p, n-1) == 0);
202
return (strcmp (q, p) == 0);
204
static inline gboolean _strings_match_case (const gchar *q, const gchar *p) // query, parameter
207
return (strcmp (q, "none") == 0);
209
if (n != 0 && q[n-1] == '*')
210
return (g_ascii_strncasecmp (q, p, n-1) == 0);
211
return (g_ascii_strcasecmp (q, p) == 0);
213
static gboolean _icon_is_matching (Icon *pIcon, CairoContainer *pContainer, CDIconQueryBuffer *pQuery)
215
gboolean bOr = FALSE;
216
gboolean bAnd = TRUE; // at least 1 of the fields is not nul.
221
if (CAIRO_DOCK_ICON_TYPE_IS_LAUNCHER (pIcon))
223
else if (CAIRO_DOCK_ICON_TYPE_IS_APPLI (pIcon))
224
cType = "Application";
225
else if (CAIRO_DOCK_ICON_TYPE_IS_APPLET (pIcon))
227
else if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
229
else if (CAIRO_DOCK_ICON_TYPE_IS_CONTAINER (pIcon))
231
else if (CAIRO_DOCK_ICON_TYPE_IS_CLASS_CONTAINER (pIcon))
232
cType = "Class-Container";
235
r = (strcmp (pQuery->cType, cType) == 0);
241
r = _strings_match (pQuery->cName, pIcon->cName);
245
if (pQuery->cCommand)
247
r = _strings_match (pQuery->cCommand, pIcon->cCommand);
253
r = _strings_match_case (pQuery->cClass, pIcon->cClass);
257
if (pQuery->cContainerName)
259
const gchar *cContainerName = NULL;
260
if (CAIRO_DOCK_IS_DOCK (pContainer))
261
cContainerName = pIcon->cParentDockName;
262
else if (CAIRO_DOCK_IS_DESKLET (pContainer))
264
Icon *pMainIcon = CAIRO_DESKLET (pContainer)->pIcon;
265
if (CAIRO_DOCK_IS_APPLET (pMainIcon))
266
cContainerName = pMainIcon->pModuleInstance->pModule->pVisitCard->cModuleName;
268
r = _strings_match (pQuery->cContainerName, cContainerName);
272
if (pQuery->Xid != 0)
274
r = (pIcon->Xid == pQuery->Xid);
278
if (pQuery->cDesktopFile)
280
r = _strings_match (pQuery->cDesktopFile, pIcon->cDesktopFileName);
281
if (!r && CAIRO_DOCK_IS_APPLET (pIcon) && pIcon->pModuleInstance->cConfFilePath)
283
if (*pQuery->cDesktopFile == '/') // query the complete path.
285
r = _strings_match (pQuery->cDesktopFile, pIcon->pModuleInstance->cConfFilePath);
287
else // query the file name only.
289
gchar *str = strrchr (pIcon->pModuleInstance->cConfFilePath, '/');
291
r = _strings_match (pQuery->cDesktopFile, str+1);
297
if (pQuery->cModuleName)
299
r = (CAIRO_DOCK_IS_APPLET (pIcon) && _strings_match (pQuery->cModuleName, pIcon->pModuleInstance->pModule->pVisitCard->cModuleName));
304
return ((pQuery->bMatchAll && bAnd) || (!pQuery->bMatchAll && bOr));
306
static void _check_icon_matching (Icon *pIcon, CairoContainer *pContainer, CDIconQueryBuffer *pQuery)
308
if (_icon_is_matching (pIcon, pContainer, pQuery))
309
pQuery->pMatchingIcons = g_list_prepend (pQuery->pMatchingIcons, pIcon);
311
static void _get_icon_at_position_in_dock (const gchar *cDockName, CairoDock *pDock, CDIconQueryBuffer *pQuery)
313
Icon *pIcon = g_list_nth_data (pDock->icons, pQuery->iPosition);
315
pQuery->pMatchingIcons = g_list_prepend (pQuery->pMatchingIcons, pIcon);
317
static gboolean _get_icon_at_position_in_desklet (CairoDesklet *pDesklet, CDIconQueryBuffer *pQuery)
319
Icon *pIcon = g_list_nth_data (pDesklet->icons, pQuery->iPosition);
321
pQuery->pMatchingIcons = g_list_prepend (pQuery->pMatchingIcons, pIcon);
322
return FALSE; // don't stop.
324
static gboolean _prepare_query (CDIconQueryBuffer *pQuery, const gchar *cKey, const gchar *cValue)
326
g_return_val_if_fail (cKey != NULL, FALSE);
327
if (cValue == NULL) // use "none" keyword to look for "icons that don't have key".
330
if (strcmp (cKey, "name") == 0 || strcmp (cKey, "label") == 0)
331
pQuery->cName = cValue;
332
else if (strcmp (cKey, "command") == 0)
333
pQuery->cCommand = cValue;
334
else if (strcmp (cKey, "class") == 0)
335
pQuery->cClass = cValue;
336
else if (strcmp (cKey, "container") == 0)
337
pQuery->cContainerName = cValue;
338
else if (strcmp (cKey, "Xid") == 0)
339
pQuery->Xid = strtol(cValue, NULL, 0); // can read hexa, decimal or octal.
340
else if (strcmp (cKey, "config-file") == 0)
341
pQuery->cDesktopFile = cValue;
342
else if (strcmp (cKey, "module") == 0)
343
pQuery->cModuleName = cValue;
344
else if (strcmp (cKey, "position") == 0)
345
pQuery->iPosition = atoi (cValue);
346
else if (strcmp (cKey, "type") == 0)
347
pQuery->cType = cValue;
350
cd_warning ("wrong key (%s)", cKey);
355
static GList *_find_matching_icons_for_key (const gchar *cKey, const gchar *cValue)
357
//g_print (" %s (%s, %s)\n", __func__, cKey, cValue);
358
CDIconQueryBuffer query;
359
memset (&query, 0, sizeof (CDIconQueryBuffer));
360
query.iPosition = -1;
361
query.bMatchAll = TRUE;
363
gboolean bValidQuery = _prepare_query (&query, cKey, cValue);
364
g_return_val_if_fail (bValidQuery, NULL);
366
if (query.iPosition >= 0)
368
cairo_dock_foreach_docks ((GHFunc) _get_icon_at_position_in_dock, &query);
369
cairo_dock_foreach_desklet ((CairoDockForeachDeskletFunc) _get_icon_at_position_in_desklet, &query);
373
cairo_dock_foreach_icons ((CairoDockForeachIconFunc) _check_icon_matching, &query);
375
return query.pMatchingIcons;
377
static GList *_find_matching_icons_for_test (gchar *cTest)
379
g_return_val_if_fail (cTest != NULL, NULL);
380
//g_print (" %s (%s)\n", __func__, cTest);
382
gchar *str = strchr (cTest, '=');
383
g_return_val_if_fail (str != NULL, NULL);
386
gchar *cKey = g_strstrip ((gchar*)cTest); // g_strstrip modifies the string in place (by moving the rest of the characters forward and cutting the trailing spaces)
387
gchar *cValue = g_strstrip (str+1);
389
return _find_matching_icons_for_key (cKey, cValue);
391
static GList *_merge (GList *pList1, GList *pList2)
393
//g_print ("%s ()\n", __func__);
397
for (ic = pList1; ic != NULL; ic = ic->next)
400
if (g_list_find (pList2, pIcon) != NULL)
401
pList = g_list_prepend (pList, pIcon);
403
g_list_free (pList1);
404
g_list_free (pList2);
407
static GList *_concat (GList *pList1, GList *pList2)
409
//g_print ("%s ()\n", __func__);
410
GList *pList = g_list_copy (pList2);
413
for (ic = pList1; ic != NULL; ic = ic->next)
416
if (!g_list_find (pList2, pIcon))
417
pList = g_list_prepend (pList, pIcon);
419
g_list_free (pList1);
420
g_list_free (pList2);
423
GList *cd_dbus_find_matching_icons (gchar *cQuery)
425
g_return_val_if_fail (cQuery != NULL, NULL);
426
//g_print ("%s (%s)\n", __func__, cQuery);
429
str = strchr (cQuery, '|'); // a && b || c && d <=> (a && b) || (c && d)
433
GList *pList1 = cd_dbus_find_matching_icons (cQuery);
434
GList *pList2 = cd_dbus_find_matching_icons (str+1);
435
return _concat (pList1, pList2);
437
str = strchr (cQuery, '&');
441
GList *pList1 = cd_dbus_find_matching_icons (cQuery);
442
GList *pList2 = cd_dbus_find_matching_icons (str+1);
443
return _merge (pList1, pList2);
445
return _find_matching_icons_for_test (cQuery);
449
gboolean cd_dbus_main_get_icon_properties (dbusMainObject *pDbusCallback, gchar *cIconQuery, GPtrArray **pIconAttributes, GError **error)
451
GList *pList = cd_dbus_find_matching_icons (cIconQuery); // if NULL, will just return an empty array.
453
GPtrArray *pTab = g_ptr_array_new ();
454
*pIconAttributes = pTab;
459
CairoContainer *pContainer;
462
const gchar *cContainerName;
463
const gchar *cDesktopFile;
465
for (ic = pList; ic != NULL; ic = ic->next)
468
pContainer = cairo_dock_search_container_from_icon (pIcon);
470
h = g_hash_table_new_full (g_str_hash,
472
g_free, /// can we use const char here instead of duplicating each string ?...
474
g_ptr_array_add (pTab, h);
476
if (CAIRO_DOCK_ICON_TYPE_IS_LAUNCHER (pIcon))
478
else if (CAIRO_DOCK_ICON_TYPE_IS_APPLI (pIcon))
479
cType = "Application";
480
else if (CAIRO_DOCK_ICON_TYPE_IS_APPLET (pIcon))
482
else if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
484
else if (CAIRO_DOCK_ICON_TYPE_IS_CONTAINER (pIcon))
486
else if (CAIRO_DOCK_ICON_TYPE_IS_CLASS_CONTAINER (pIcon))
487
cType = "Class-Container";
490
v = g_new0 (GValue, 1);
491
g_value_init (v, G_TYPE_STRING);
492
g_value_set_string (v, cType);
493
g_hash_table_insert (h, g_strdup ("type"), v);
496
if (pIcon->cDesktopFileName != NULL)
497
cDesktopFile = pIcon->cDesktopFileName;
498
else if (CAIRO_DOCK_IS_APPLET (pIcon))
499
cDesktopFile = pIcon->pModuleInstance->cConfFilePath;
500
v = g_new0 (GValue, 1);
501
g_value_init (v, G_TYPE_STRING);
502
g_value_set_string (v, cDesktopFile);
503
g_hash_table_insert (h, g_strdup ("config-file"), v);
505
if (CAIRO_DOCK_IS_APPLET (pIcon))
507
v = g_new0 (GValue, 1);
508
g_value_init (v, G_TYPE_STRING);
509
g_value_set_string (v, pIcon->pModuleInstance->pModule->pVisitCard->cModuleName);
510
g_hash_table_insert (h, g_strdup ("module"), v);
513
v = g_new0 (GValue, 1);
514
g_value_init (v, G_TYPE_STRING);
515
g_value_set_string (v, pIcon->cName); /// g_value_set_static_string ?...
516
g_hash_table_insert (h, g_strdup ("name"), v);
518
v = g_new0 (GValue, 1);
519
g_value_init (v, G_TYPE_STRING);
520
g_value_set_string (v, pIcon->cCommand);
521
g_hash_table_insert (h, g_strdup ("command"), v);
523
v = g_new0 (GValue, 1);
524
g_value_init (v, G_TYPE_STRING);
525
g_value_set_string (v, pIcon->cClass);
526
g_hash_table_insert (h, g_strdup ("class"), v);
528
v = g_new0 (GValue, 1);
529
g_value_init (v, G_TYPE_STRING);
530
g_value_set_string (v, pIcon->cFileName);
531
g_hash_table_insert (h, g_strdup ("icon"), v);
533
v = g_new0 (GValue, 1);
534
g_value_init (v, G_TYPE_STRING);
535
g_value_set_string (v, pIcon->cQuickInfo);
536
g_hash_table_insert (h, g_strdup ("quick-info"), v);
538
v = g_new0 (GValue, 1);
539
g_value_init (v, G_TYPE_UINT);
540
g_value_set_uint (v, pIcon->Xid);
541
g_hash_table_insert (h, g_strdup ("Xid"), v);
544
cContainerName = NULL;
545
if (CAIRO_DOCK_IS_DOCK (pContainer))
547
CairoDock *pDock = CAIRO_DOCK (pContainer);
548
iPosition = g_list_index (pDock->icons, pIcon);
549
cContainerName = pIcon->cParentDockName;
551
else if (CAIRO_DOCK_IS_DESKLET (pContainer))
553
CairoDesklet *pDesklet = CAIRO_DESKLET (pContainer);
554
if (pDesklet->pIcon == pIcon)
557
iPosition = g_list_index (pDesklet->icons, pIcon);
558
if (CAIRO_DOCK_IS_APPLET (pDesklet->pIcon))
559
cContainerName = pDesklet->pIcon->pModuleInstance->pModule->pVisitCard->cModuleName;
561
v = g_new0 (GValue, 1);
562
g_value_init (v, G_TYPE_INT);
563
g_value_set_int (v, iPosition);
564
g_hash_table_insert (h, g_strdup ("position"), v);
566
v = g_new0 (GValue, 1);
567
g_value_init (v, G_TYPE_STRING);
568
g_value_set_string (v, cContainerName);
569
g_hash_table_insert (h, g_strdup ("container"), v);
571
v = g_new0 (GValue, 1);
572
g_value_init (v, G_TYPE_DOUBLE);
573
g_value_set_double (v, pIcon->fOrder);
574
g_hash_table_insert (h, g_strdup ("order"), v);
581
static void _set_container_props (CairoContainer *pContainer, GHashTable *h)
585
if (pContainer->bIsHorizontal)
587
x = pContainer->iWindowPositionX;
588
y = pContainer->iWindowPositionY;
589
w = pContainer->iWidth;
590
ht = pContainer->iHeight;
594
y = pContainer->iWindowPositionX;
595
x = pContainer->iWindowPositionY;
596
ht = pContainer->iWidth;
597
w = pContainer->iHeight;
599
v = g_new0 (GValue, 1);
600
g_value_init (v, G_TYPE_INT);
601
g_value_set_int (v, pContainer->iWindowPositionX);
602
g_hash_table_insert (h, g_strdup ("x"), v);
604
v = g_new0 (GValue, 1);
605
g_value_init (v, G_TYPE_INT);
606
g_value_set_int (v, y);
607
g_hash_table_insert (h, g_strdup ("y"), v);
609
v = g_new0 (GValue, 1);
610
g_value_init (v, G_TYPE_INT);
611
g_value_set_int (v, w);
612
g_hash_table_insert (h, g_strdup ("width"), v);
614
v = g_new0 (GValue, 1);
615
g_value_init (v, G_TYPE_INT);
616
g_value_set_int (v, ht);
617
g_hash_table_insert (h, g_strdup ("height"), v);
619
CairoDockPositionType iScreenBorder = ((! pContainer->bIsHorizontal) << 1) | (! pContainer->bDirectionUp);
620
v = g_new0 (GValue, 1);
621
g_value_init (v, G_TYPE_UINT);
622
g_value_set_uint (v, iScreenBorder);
623
g_hash_table_insert (h, g_strdup ("orientation"), v);
625
static void _insert_dock_props (const gchar *cDockName, CairoDock *pDock, GPtrArray *pTab)
627
GHashTable *h = g_hash_table_new_full (g_str_hash,
629
g_free, /// can we use const char here instead of duplicating each string ?...
631
g_ptr_array_add (pTab, h);
635
v = g_new0 (GValue, 1);
636
g_value_init (v, G_TYPE_STRING);
637
g_value_set_string (v, "Dock");
638
g_hash_table_insert (h, g_strdup ("type"), v);
640
v = g_new0 (GValue, 1);
641
g_value_init (v, G_TYPE_STRING);
642
g_value_set_string (v, cDockName);
643
g_hash_table_insert (h, g_strdup ("name"), v);
645
v = g_new0 (GValue, 1);
646
g_value_init (v, G_TYPE_BOOLEAN);
647
g_value_set_boolean (v, (pDock->iRefCount > 0));
648
g_hash_table_insert (h, g_strdup ("is-sub-dock"), v);
650
v = g_new0 (GValue, 1);
651
g_value_init (v, G_TYPE_INT);
652
g_value_set_int (v, g_list_length (pDock->icons));
653
g_hash_table_insert (h, g_strdup ("nb-icons"), v);
655
_set_container_props (CAIRO_CONTAINER (pDock), h);
657
static gboolean _insert_desklet_props (CairoDesklet *pDesklet, GPtrArray *pTab)
659
GHashTable *h = g_hash_table_new_full (g_str_hash,
661
g_free, /// can we use const char here instead of duplicating each string ?...
663
g_ptr_array_add (pTab, h);
667
v = g_new0 (GValue, 1);
668
g_value_init (v, G_TYPE_STRING);
669
g_value_set_string (v, "Desklet");
670
g_hash_table_insert (h, g_strdup ("type"), v);
672
v = g_new0 (GValue, 1);
673
g_value_init (v, G_TYPE_STRING);
674
g_value_set_string (v, CAIRO_DOCK_IS_APPLET (pDesklet->pIcon) ? pDesklet->pIcon->pModuleInstance->pModule->pVisitCard->cModuleName : "");
675
g_hash_table_insert (h, g_strdup ("name"), v);
677
v = g_new0 (GValue, 1);
678
g_value_init (v, G_TYPE_INT);
679
g_value_set_int (v, 1 + g_list_length (pDesklet->icons));
680
g_hash_table_insert (h, g_strdup ("nb-icons"), v);
682
_set_container_props (CAIRO_CONTAINER (pDesklet), h);
685
static gboolean _check_desklet_name (CairoDesklet *pDesklet, const gchar *cName)
687
if (CAIRO_DOCK_IS_APPLET (pDesklet->pIcon))
689
return (strcmp (cName, pDesklet->pIcon->pModuleInstance->pModule->pVisitCard->cModuleName) == 0);
693
gboolean cd_dbus_main_get_container_properties (dbusMainObject *pDbusCallback, const gchar *cName, GPtrArray **pAttributes, GError **error)
695
nullify_argument (cName);
697
GPtrArray *pTab = g_ptr_array_new ();
702
cairo_dock_foreach_docks ((GHFunc)_insert_dock_props, pTab);
703
cairo_dock_foreach_desklet ((CairoDockForeachDeskletFunc) _insert_desklet_props, pTab);
707
CairoDock *pDock = cairo_dock_search_dock_from_name (cName);
710
_insert_dock_props (cName, pDock, pTab);
714
CairoDesklet *pDesklet = cairo_dock_foreach_desklet ((CairoDockForeachDeskletFunc) _check_desklet_name, (gpointer)cName);
715
if (pDesklet != NULL)
717
_insert_desklet_props (pDesklet, pTab);
725
static gboolean _insert_module_props (CairoDockModule *pModule, GPtrArray *pTab)
727
GHashTable *h = g_hash_table_new_full (g_str_hash,
729
g_free, /// can we use const char here instead of duplicating each string ?...
731
g_ptr_array_add (pTab, h);
735
v = g_new0 (GValue, 1);
736
g_value_init (v, G_TYPE_STRING);
737
g_value_set_string (v, pModule->pVisitCard->cModuleName);
738
g_hash_table_insert (h, g_strdup ("name"), v);
740
v = g_new0 (GValue, 1);
741
g_value_init (v, G_TYPE_UINT);
742
g_value_set_uint (v, pModule->pVisitCard->iContainerType);
743
g_hash_table_insert (h, g_strdup ("type"), v);
745
v = g_new0 (GValue, 1);
746
g_value_init (v, G_TYPE_UINT);
747
g_value_set_uint (v, pModule->pVisitCard->iCategory);
748
g_hash_table_insert (h, g_strdup ("category"), v);
750
v = g_new0 (GValue, 1);
751
g_value_init (v, G_TYPE_STRING);
752
g_value_set_string (v, pModule->pVisitCard->cTitle);
753
g_hash_table_insert (h, g_strdup ("title"), v);
755
v = g_new0 (GValue, 1);
756
g_value_init (v, G_TYPE_STRING);
757
g_value_set_string (v, pModule->pVisitCard->cIconFilePath);
758
g_hash_table_insert (h, g_strdup ("icon"), v);
760
v = g_new0 (GValue, 1);
761
g_value_init (v, G_TYPE_STRING);
762
g_value_set_string (v, pModule->pVisitCard->cPreviewFilePath);
763
g_hash_table_insert (h, g_strdup ("preview"), v);
765
v = g_new0 (GValue, 1);
766
g_value_init (v, G_TYPE_STRING);
767
g_value_set_string (v, dgettext (pModule->pVisitCard->cGettextDomain, pModule->pVisitCard->cDescription));
768
g_hash_table_insert (h, g_strdup ("description"), v);
770
v = g_new0 (GValue, 1);
771
g_value_init (v, G_TYPE_STRING);
772
g_value_set_string (v, pModule->pVisitCard->cAuthor);
773
g_hash_table_insert (h, g_strdup ("author"), v);
775
v = g_new0 (GValue, 1);
776
g_value_init (v, G_TYPE_BOOLEAN);
777
g_value_set_boolean (v, pModule->pVisitCard->bMultiInstance);
778
g_hash_table_insert (h, g_strdup ("is-multi-instance"), v);
780
g_print ("list instances ...\n");
781
gchar **pInstances = g_new0 (gchar*, g_list_length (pModule->pInstancesList)+1);
782
CairoDockModuleInstance *pInstance;
785
for (mi = pModule->pInstancesList; mi != NULL; mi = mi->next)
787
pInstance = mi->data;
788
pInstances[i++] = g_strdup (pInstance->cConfFilePath);
790
g_print ("write instances ...\n");
791
v = g_new0 (GValue, 1);
792
g_value_init (v, G_TYPE_STRV);
793
g_value_set_boxed (v, pInstances);
794
g_hash_table_insert (h, g_strdup ("instances"), v);
796
return TRUE; // continue
798
gboolean cd_dbus_main_get_module_properties (dbusMainObject *pDbusCallback, const gchar *cName, GPtrArray **pAttributes, GError **error)
800
nullify_argument (cName);
802
GPtrArray *pTab = g_ptr_array_new ();
807
cairo_dock_foreach_module_in_alphabetical_order ((GCompareFunc) _insert_module_props, pTab);
811
CairoDockModule *pModule = cairo_dock_find_module_from_name (cName);
814
_insert_module_props (pModule, pTab);
820
gboolean cd_dbus_main_add_launcher (dbusMainObject *pDbusCallback, const gchar *cDesktopFilePath, gdouble fOrder, const gchar *cDockName, gchar **cLauncherFile, GError **error)
822
*cLauncherFile = NULL;
823
if (! myConfig.bEnableCreateLauncher)
825
g_return_val_if_fail (cDesktopFilePath != NULL, FALSE);
827
//\_______________ get the dock where to insert the icon.
828
nullify_argument (cDockName);
829
if (cDockName == NULL)
830
cDockName = CAIRO_DOCK_MAIN_DOCK_NAME;
832
CairoDock * pParentDock = cairo_dock_search_dock_from_name (cDockName);
833
if (pParentDock == NULL)
835
cd_warning ("dock %s does not exist", cDockName);
836
pParentDock = g_pMainDock;
839
//\_______________ add a new icon in the current theme.
840
int iLauncherType = -1;
841
if (strcmp (cDesktopFilePath, "separator.desktop") == 0)
842
iLauncherType = CAIRO_DOCK_DESKTOP_FILE_FOR_SEPARATOR;
843
else if (strcmp (cDesktopFilePath, "container.desktop") == 0)
844
iLauncherType = CAIRO_DOCK_DESKTOP_FILE_FOR_CONTAINER;
845
else if (strcmp (cDesktopFilePath, "launcher.desktop") == 0)
846
iLauncherType = CAIRO_DOCK_DESKTOP_FILE_FOR_LAUNCHER;
849
fOrder = CAIRO_DOCK_LAST_ORDER;
851
if (iLauncherType != -1)
852
pNewIcon = cairo_dock_add_new_launcher_by_type (iLauncherType, pParentDock, fOrder, CAIRO_DOCK_LAUNCHER);
854
pNewIcon = cairo_dock_add_new_launcher_by_uri (cDesktopFilePath, pParentDock, fOrder);
855
if (pNewIcon != NULL)
857
*cLauncherFile = g_strdup (pNewIcon->cDesktopFileName);
864
gboolean cd_dbus_main_add_temporary_icon (dbusMainObject *pDbusCallback, GHashTable *hIconAttributes, GError **error)
866
if (! myConfig.bEnableCreateLauncher)
869
g_return_val_if_fail (hIconAttributes != NULL, FALSE);
871
//\_______________ get the attributes.
873
const gchar *cType = "Launcher";
874
v = g_hash_table_lookup (hIconAttributes, "type");
875
if (v && G_VALUE_HOLDS_STRING (v))
877
cType = g_value_get_string (v);
880
const gchar *cIcon = NULL;
881
v = g_hash_table_lookup (hIconAttributes, "icon");
882
if (v && G_VALUE_HOLDS_STRING (v))
884
cIcon = g_value_get_string (v);
887
const gchar *cName = NULL;
888
v = g_hash_table_lookup (hIconAttributes, "name");
890
v = g_hash_table_lookup (hIconAttributes, "label");
891
if (v && G_VALUE_HOLDS_STRING (v))
893
cName = g_value_get_string (v);
896
const gchar *cParentDockName = CAIRO_DOCK_MAIN_DOCK_NAME;
897
v = g_hash_table_lookup (hIconAttributes, "container");
898
if (v && G_VALUE_HOLDS_STRING (v))
900
cParentDockName = g_value_get_string (v);
903
const gchar *cQuickInfo = NULL;
904
v = g_hash_table_lookup (hIconAttributes, "quick-info");
905
if (v && G_VALUE_HOLDS_STRING (v))
907
cQuickInfo = g_value_get_string (v);
910
double fOrder = CAIRO_DOCK_LAST_ORDER;
911
v = g_hash_table_lookup (hIconAttributes, "order");
912
if (v && G_VALUE_HOLDS_DOUBLE (v))
914
fOrder = g_value_get_double (v);
918
v = g_hash_table_lookup (hIconAttributes, "position");
919
if (v && G_VALUE_HOLDS_INT (v))
921
iPosition = g_value_get_int (v);
924
const gchar *cCommand = NULL;
925
v = g_hash_table_lookup (hIconAttributes, "command");
926
if (v && G_VALUE_HOLDS_STRING (v))
928
cCommand = g_value_get_string (v);
931
const gchar *cClass = NULL;
932
v = g_hash_table_lookup (hIconAttributes, "class");
933
if (v && G_VALUE_HOLDS_STRING (v))
935
cClass = g_value_get_string (v); // "none" to skip taskbar
174
938
CairoDock *pParentDock = cairo_dock_search_dock_from_name (cParentDockName);
175
939
if (pParentDock == NULL)
177
cd_message ("le dock parent (%s) n'existe pas, on le cree", cParentDockName);
178
pParentDock = cairo_dock_create_dock (cParentDockName, NULL);
181
Icon *pIcon = cairo_dock_create_dummy_launcher (g_strdup (cLabel),
182
g_strdup (cIconFile),
185
CAIRO_DOCK_LAST_ORDER);
941
cd_warning ("dock %s does not exist", cParentDockName);
942
pParentDock = g_pMainDock;
945
if (iPosition > -1) // the position will overwrite the order if ever both are defined.
949
double nth_order = -1;
952
for (i = 0, ic = pParentDock->icons; i < iPosition && ic != NULL; i ++, ic = ic->next)
955
nth_order = nth_icon->fOrder;
957
if (ic == NULL) // not enough icons, place the new one just after the last one.
959
fOrder = nth_order + 1;
964
fOrder = (nth_order + nth_icon->fOrder) / 2;
968
//\_______________ create a corresponding icon.
970
if (cType == NULL || strcmp (cType, "Launcher") == 0)
972
pIcon = cairo_dock_create_dummy_launcher (g_strdup (cName),
975
g_strdup (cQuickInfo),
977
pIcon->iTrueType = CAIRO_DOCK_ICON_TYPE_LAUNCHER; // make it a launcher, since we have no control on it, so that the dock handles it as any launcher.
980
gchar *cGuessedClass = cairo_dock_guess_class (cCommand, NULL);
981
pIcon->cClass = cairo_dock_register_class (cGuessedClass);
982
g_free (cGuessedClass);
984
else if (strcmp (cClass, "none") != 0)
986
pIcon->cClass = cairo_dock_register_class (cClass);
987
if (pIcon->cClass == NULL) // if we couldn't find the class desktop file, set the class anyway, since it was explicitely specified; the method caller probably knows more than us what he's doing.
988
pIcon->cClass = g_strdup (cClass);
991
else if (strcmp (cType, "Container") == 0)
993
int iSubdockViewType = 0;
994
if (!cIcon || strcmp (cIcon, "Box") == 0)
996
iSubdockViewType = 3;
999
else if (strcmp (cIcon, "Stack") == 0)
1001
iSubdockViewType = 2;
1004
else if (strcmp (cIcon, "Emblems") == 0)
1006
iSubdockViewType = 1;
1009
gchar *cUniqueName = cairo_dock_get_unique_dock_name (cName);
1010
pIcon = cairo_dock_create_dummy_launcher (cUniqueName,
1015
pIcon->iTrueType = CAIRO_DOCK_ICON_TYPE_CONTAINER;
1016
pIcon->iSubdockViewType = iSubdockViewType;
1017
pIcon->pSubDock = cairo_dock_create_subdock_from_scratch (NULL, pIcon->cName, pParentDock); // NULL <=> default sub-docks view.
1019
else if (strcmp (cType, "Separator") == 0)
1021
pIcon = cairo_dock_create_separator_icon (CAIRO_DOCK_LAUNCHER, NULL); // NULL because we'll load the icon ourselves later.
1025
cd_warning ("type '%s' invalid", cType);
186
1028
pIcon->cParentDockName = g_strdup (cParentDockName);
187
cairo_dock_set_launcher_class (pIcon, NULL);
1030
//\_______________ load it inside the dock.
189
1031
cairo_dock_load_icon_buffers (pIcon, CAIRO_CONTAINER (pParentDock));
191
1033
cairo_dock_insert_icon_in_dock (pIcon, pParentDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, CAIRO_DOCK_ANIMATE_ICON);
192
cairo_dock_launch_animation (CAIRO_CONTAINER (pParentDock));
1034
cairo_dock_start_icon_animation (pIcon, pParentDock);
194
1036
if (pIcon->cClass != NULL)
246
gboolean cd_dbus_main_reload_launcher (dbusMainObject *pDbusCallback, const gchar *cDesktopFile, GError **error)
248
if (! myConfig.bEnableTweakingLauncher)
251
nullify_argument (cDesktopFile);
252
g_return_val_if_fail (cDesktopFile != NULL, FALSE);
254
Icon *pIcon = cd_dbus_find_launcher (cDesktopFile);
258
cairo_dock_reload_launcher (pIcon);
263
gboolean cd_dbus_main_remove_launcher (dbusMainObject *pDbusCallback, const gchar *cDesktopFile, GError **error)
265
if (! myConfig.bEnableTweakingLauncher)
268
nullify_argument (cDesktopFile);
269
g_return_val_if_fail (cDesktopFile != NULL, FALSE);
271
Icon *pIcon = cd_dbus_find_launcher (cDesktopFile);
275
if (pIcon->pSubDock != NULL) // on detruit le sous-dock et ce qu'il contient.
277
cairo_dock_destroy_dock (pIcon->pSubDock, (pIcon->cClass != NULL ? pIcon->cClass : pIcon->cName));
278
pIcon->pSubDock = NULL;
281
cairo_dock_trigger_icon_removal_from_dock (pIcon);
289
static void _find_icon_in_dock (Icon *pIcon, CairoDock *pDock, gpointer *data)
291
gchar *cIconName = data[0];
292
gchar *cIconCommand = data[1];
293
Icon **pFoundIcon = data[2];
294
gchar *cName = (pIcon->cInitialName != NULL ? pIcon->cInitialName : pIcon->cName);
295
//g_print ("%s (%s/%s, %s/%s)\n", __func__, cName, cIconName, pIcon->cCommand, cIconCommand);
296
if ((cIconName == NULL || (cName && g_ascii_strncasecmp (cIconName, cName, strlen (cIconName)) == 0)) &&
297
(cIconCommand == NULL || (pIcon->cCommand && g_ascii_strncasecmp (cIconCommand, pIcon->cCommand, strlen (cIconCommand)) == 0) || (pIcon->cClass && g_ascii_strncasecmp (cIconCommand, pIcon->cClass, strlen (cIconCommand)) == 0))) // si un des parametre est non nul, alors on exige qu'il corresponde. 'cIconCommand' peut correspondre soit avec la commande, soit avec la classe.
299
Icon *icon = *pFoundIcon;
300
if (icon != NULL) // on avait deja trouve une icone avant.
302
cName = (pIcon->cInitialName != NULL ? pIcon->cInitialName : pIcon->cName);
303
if ((cIconName && cName && g_ascii_strcasecmp (cIconName, cName) == 0) ||
304
(cIconCommand && pIcon->cCommand && g_ascii_strcasecmp (cIconCommand, pIcon->cCommand))) // elle satisfait entierement aux criteres, donc on la garde.
310
Icon *cd_dbus_find_icon (const gchar *cIconName, const gchar *cIconCommand, const gchar *cModuleName)
313
if (cModuleName != NULL) // c'est une icone d'un des modules.
315
CairoDockModule *pModule = cairo_dock_find_module_from_name (cModuleName);
316
g_return_val_if_fail (pModule != NULL, FALSE);
318
if (pModule->pInstancesList != NULL)
320
CairoDockModuleInstance *pModuleInstance = pModule->pInstancesList->data;
321
if (pModuleInstance != NULL)
322
pIcon = pModuleInstance->pIcon;
325
else if (cIconName || cIconCommand) // on cherche une icone de lanceur.
328
data[0] = (gpointer) cIconName;
329
data[1] = (gpointer) cIconCommand;
331
cairo_dock_foreach_icons_in_docks ((CairoDockForeachIconFunc) _find_icon_in_dock, data);
335
gboolean cd_dbus_main_set_quick_info (dbusMainObject *pDbusCallback, const gchar *cQuickInfo, const gchar *cIconName, const gchar *cIconCommand, const gchar *cModuleName, GError **error)
1064
gboolean cd_dbus_main_reload_icon (dbusMainObject *pDbusCallback, gchar *cIconQuery, GError **error)
1066
if (! myConfig.bEnableTweakingLauncher)
1068
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
1073
CairoContainer *pContainer;
1075
for (ic = pList; ic != NULL; ic = ic->next)
1079
if ((CAIRO_DOCK_ICON_TYPE_IS_LAUNCHER (pIcon)
1080
|| CAIRO_DOCK_ICON_TYPE_IS_CONTAINER (pIcon)
1081
|| CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
1082
&& pIcon->cDesktopFileName != NULL) // user icon.
1084
cairo_dock_reload_launcher (pIcon);
1086
else if (CAIRO_DOCK_IS_APPLET (pIcon))
1088
cairo_dock_reload_module_instance (pIcon->pModuleInstance, TRUE); // TRUE <=> reload config.
1090
else // for appli icons, reload their image (custom image for instance).
1092
pContainer = cairo_dock_search_container_from_icon (pIcon);
1093
if (pContainer == NULL)
1096
cairo_dock_reload_icon_image (pIcon, pContainer);
1097
cairo_dock_redraw_icon (pIcon, pContainer);
1104
static gboolean _on_icon_deleted (GList *ic, Icon *pIcon)
1108
gboolean cd_dbus_main_remove_icon (dbusMainObject *pDbusCallback, gchar *cIconQuery, GError **error)
1110
if (! myConfig.bEnableTweakingLauncher)
1113
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
1117
// first connect to the "delete" signal, to not destroy 2 times an icon (case of an icon in a sub-dock that is destroyed just before).
1119
CairoContainer *pContainer;
1121
for (ic = pList; ic != NULL; ic = ic->next)
1124
cairo_dock_register_notification_on_object (pIcon,
1125
NOTIFICATION_STOP_ICON,
1126
(CairoDockNotificationFunc) _on_icon_deleted,
1127
CAIRO_DOCK_RUN_FIRST, ic);
1130
// delete all the matching icons, including their sub-icons.
1131
for (ic = pList; ic != NULL; ic = ic->next)
1134
if (pIcon == NULL) // icon has been destroyed just before.
1137
cairo_dock_remove_notification_func_on_object (pIcon,
1138
NOTIFICATION_STOP_ICON,
1139
(CairoDockNotificationFunc) _on_icon_deleted,
1140
ic); // remove it now, since maybe this icon won't be deleted.
1142
pContainer = cairo_dock_search_container_from_icon (pIcon);
1143
if (pContainer == NULL)
1146
if (CAIRO_DOCK_ICON_TYPE_IS_LAUNCHER (pIcon)
1147
|| CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon)
1148
|| CAIRO_DOCK_ICON_TYPE_IS_CONTAINER (pIcon)) // case of a launcher/separator/sub-dock inside a dock.
1150
if (pIcon->pSubDock != NULL) // on detruit le sous-dock et ce qu'il contient.
1152
cairo_dock_destroy_dock (pIcon->pSubDock, (pIcon->cClass != NULL ? pIcon->cClass : pIcon->cName));
1153
pIcon->pSubDock = NULL;
1156
cairo_dock_trigger_icon_removal_from_dock (pIcon);
1158
else if (CAIRO_DOCK_IS_APPLET (pIcon)) // case of an applet inside a dock or a desklet.
1160
cairo_dock_remove_module_instance (pIcon->pModuleInstance);
1161
} // don't remove appli icons, as they would anyway be re-created automatically by the applications-manager.
1164
g_list_free (pList);
1173
gboolean cd_dbus_main_set_quick_info (dbusMainObject *pDbusCallback, const gchar *cQuickInfo, gchar *cIconQuery, GError **error)
337
1175
if (! myConfig.bEnableSetQuickInfo)
340
nullify_argument (cIconName);
341
nullify_argument (cIconCommand);
342
nullify_argument (cModuleName);
1178
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
343
1182
nullify_argument (cQuickInfo);
345
Icon *pIcon = cd_dbus_find_icon (cIconName, cIconCommand, cModuleName);
349
CairoContainer *pContainer = cairo_dock_search_container_from_icon (pIcon);
350
g_return_val_if_fail (pContainer != NULL, FALSE);
352
cairo_dock_set_quick_info (pIcon, pContainer, cQuickInfo);
353
cairo_dock_redraw_icon (pIcon, pContainer);
1185
CairoContainer *pContainer;
1187
for (ic = pList; ic != NULL; ic = ic->next)
1190
pContainer = cairo_dock_search_container_from_icon (pIcon);
1191
if (pContainer == NULL)
1194
cairo_dock_set_quick_info (pIcon, pContainer, cQuickInfo);
1195
cairo_dock_redraw_icon (pIcon, pContainer);
1198
g_list_free (pList);
357
gboolean cd_dbus_main_set_label (dbusMainObject *pDbusCallback, const gchar *cLabel, const gchar *cIconName, const gchar *cIconCommand, const gchar *cModuleName, GError **error)
1202
gboolean cd_dbus_main_set_label (dbusMainObject *pDbusCallback, const gchar *cLabel, gchar *cIconQuery, GError **error)
359
1204
if (! myConfig.bEnableSetLabel)
362
nullify_argument (cIconName);
363
nullify_argument (cIconCommand);
364
nullify_argument (cModuleName);
1207
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
365
1211
nullify_argument (cLabel);
367
Icon *pIcon = cd_dbus_find_icon (cIconName, cIconCommand, cModuleName);
371
CairoContainer *pContainer = cairo_dock_search_container_from_icon (pIcon);
372
g_return_val_if_fail (pContainer != NULL, FALSE);
373
cairo_dock_set_icon_name (cLabel, pIcon, pContainer);
377
gboolean cd_dbus_main_set_icon (dbusMainObject *pDbusCallback, const gchar *cImage, const gchar *cIconName, const gchar *cIconCommand, const gchar *cModuleName, GError **error)
379
if (! myConfig.bEnableSetIcon)
382
nullify_argument (cIconName);
383
nullify_argument (cIconCommand);
384
nullify_argument (cModuleName);
386
Icon *pIcon = cd_dbus_find_icon (cIconName, cIconCommand, cModuleName);
390
CairoContainer *pContainer = cairo_dock_search_container_from_icon (pIcon);
391
g_return_val_if_fail (pContainer != NULL, FALSE);
392
g_return_val_if_fail (pIcon->pIconBuffer != NULL, FALSE);
393
cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
394
cairo_dock_set_image_on_icon (pIconContext, cImage, pIcon, pContainer);
395
cairo_destroy (pIconContext);
396
cairo_dock_redraw_icon (pIcon, pContainer);
400
gboolean cd_dbus_main_set_emblem (dbusMainObject *pDbusCallback, const gchar *cImage, gint iPosition, const gchar *cIconName, const gchar *cIconCommand, const gchar *cModuleName, GError **error)
402
if (! myConfig.bEnableSetIcon)
405
nullify_argument (cIconName);
406
nullify_argument (cIconCommand);
407
nullify_argument (cModuleName);
409
Icon *pIcon = cd_dbus_find_icon (cIconName, cIconCommand, cModuleName);
413
CairoContainer *pContainer = cairo_dock_search_container_from_icon (pIcon);
414
g_return_val_if_fail (pContainer != NULL, FALSE);
415
g_return_val_if_fail (pIcon->pIconBuffer != NULL, FALSE);
416
cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
418
CairoEmblem *pEmblem = cairo_dock_make_emblem (cImage, pIcon, pContainer);
419
pEmblem->iPosition = iPosition;
420
cairo_dock_draw_emblem_on_icon (pEmblem, pIcon, pContainer);
421
cairo_dock_free_emblem (pEmblem);
423
cairo_destroy (pIconContext);
424
cairo_dock_redraw_icon (pIcon, pContainer);
428
gboolean cd_dbus_main_animate (dbusMainObject *pDbusCallback, const gchar *cAnimation, gint iNbRounds, const gchar *cIconName, const gchar *cIconCommand, const gchar *cModuleName, GError **error)
1214
CairoContainer *pContainer;
1216
for (ic = pList; ic != NULL; ic = ic->next)
1219
pContainer = cairo_dock_search_container_from_icon (pIcon);
1220
if (pContainer == NULL)
1223
cairo_dock_set_icon_name (cLabel, pIcon, pContainer);
1226
g_list_free (pList);
1230
gboolean cd_dbus_main_set_icon (dbusMainObject *pDbusCallback, const gchar *cImage, gchar *cIconQuery, GError **error)
1232
if (! myConfig.bEnableSetIcon)
1235
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
1240
CairoContainer *pContainer;
1242
for (ic = pList; ic != NULL; ic = ic->next)
1245
if (pIcon->pIconBuffer == NULL)
1248
pContainer = cairo_dock_search_container_from_icon (pIcon);
1249
if (pContainer == NULL)
1252
cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
1253
cairo_dock_set_image_on_icon (pIconContext, cImage, pIcon, pContainer);
1254
cairo_destroy (pIconContext);
1255
cairo_dock_redraw_icon (pIcon, pContainer);
1258
g_list_free (pList);
1262
gboolean cd_dbus_main_set_emblem (dbusMainObject *pDbusCallback, const gchar *cImage, gint iPosition, gchar *cIconQuery, GError **error)
1264
if (! myConfig.bEnableSetIcon)
1267
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
1272
CairoContainer *pContainer;
1274
for (ic = pList; ic != NULL; ic = ic->next)
1277
if (pIcon->pIconBuffer == NULL)
1280
pContainer = cairo_dock_search_container_from_icon (pIcon);
1281
if (pContainer == NULL)
1284
cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
1286
CairoEmblem *pEmblem = cairo_dock_make_emblem (cImage, pIcon, pContainer);
1287
pEmblem->iPosition = iPosition;
1288
cairo_dock_draw_emblem_on_icon (pEmblem, pIcon, pContainer);
1289
cairo_dock_free_emblem (pEmblem);
1291
cairo_destroy (pIconContext);
1292
cairo_dock_redraw_icon (pIcon, pContainer);
1295
g_list_free (pList);
1299
gboolean cd_dbus_main_animate (dbusMainObject *pDbusCallback, const gchar *cAnimation, gint iNbRounds, gchar *cIconQuery, GError **error)
430
1301
if (! myConfig.bEnableAnimateIcon || cAnimation == NULL)
433
nullify_argument (cIconName);
434
nullify_argument (cIconCommand);
435
nullify_argument (cModuleName);
437
Icon *pIcon = cd_dbus_find_icon (cIconName, cIconCommand, cModuleName);
441
CairoContainer *pContainer = cairo_dock_search_container_from_icon (pIcon);
442
g_return_val_if_fail (pContainer != NULL, FALSE);
444
if (! CAIRO_DOCK_IS_DOCK (pContainer))
447
cairo_dock_request_icon_animation (pIcon, CAIRO_DOCK (pContainer), cAnimation, iNbRounds);
451
gboolean cd_dbus_main_show_dialog (dbusMainObject *pDbusCallback, const gchar *message, gint iDuration, const gchar *cIconName, const gchar *cIconCommand, const gchar *cModuleName, GError **error)
1304
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
1309
CairoContainer *pContainer;
1311
for (ic = pList; ic != NULL; ic = ic->next)
1314
pContainer = cairo_dock_search_container_from_icon (pIcon);
1315
if (! CAIRO_DOCK_IS_DOCK (pContainer))
1317
cairo_dock_request_icon_animation (pIcon, CAIRO_DOCK (pContainer), cAnimation, iNbRounds);
1320
g_list_free (pList);
1324
gboolean cd_dbus_main_demands_attention (dbusMainObject *pDbusCallback, gboolean bStart, const gchar *cAnimation, gchar *cIconQuery, GError **error)
1326
if (! myConfig.bEnableAnimateIcon)
1329
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
1334
CairoContainer *pContainer;
1336
for (ic = pList; ic != NULL; ic = ic->next)
1339
pContainer = cairo_dock_search_container_from_icon (pIcon);
1340
if (! CAIRO_DOCK_IS_DOCK (pContainer))
1345
cairo_dock_request_icon_attention (pIcon, CAIRO_DOCK (pContainer), cAnimation, 0); // 0 <=> non-stop.
1347
else if (pIcon->bIsDemandingAttention)
1349
cairo_dock_stop_icon_attention (pIcon, CAIRO_DOCK (pContainer));
1353
g_list_free (pList);
1357
gboolean cd_dbus_main_show_dialog (dbusMainObject *pDbusCallback, const gchar *message, gint iDuration, gchar *cIconQuery, GError **error)
453
1359
if (! myConfig.bEnablePopUp)
455
1361
g_return_val_if_fail (message != NULL, FALSE);
457
nullify_argument (cIconName);
458
nullify_argument (cIconCommand);
459
nullify_argument (cModuleName);
1363
GList *pList = cd_dbus_find_matching_icons (cIconQuery);
461
Icon *pIcon = cd_dbus_find_icon (cIconName, cIconCommand, cModuleName);
1366
CairoContainer *pContainer;
1368
for (ic = pList; ic != NULL; ic = ic->next)
464
CairoContainer *pContainer = cairo_dock_search_container_from_icon (pIcon);
465
if (pContainer != NULL)
467
cairo_dock_show_temporary_dialog_with_icon (message, pIcon, pContainer, 1000 * iDuration, "same icon");
1371
pContainer = cairo_dock_search_container_from_icon (pIcon);
1372
if (! CAIRO_DOCK_IS_DOCK (pContainer))
1374
cairo_dock_show_temporary_dialog_with_icon (message, pIcon, pContainer, 1000 * iDuration, "same icon");
1375
break; // only show 1 dialog.
472
cairo_dock_show_general_message (message, 1000 * iDuration);
476
/*gboolean cd_dbus_get_appet_context (dbusMainObject *pDbusCallback, const gchar *cAppletName, GPtrArray **pContext, GError **error)
478
g_return_val_if_fail (cAppletName != NULL, FALSE);
480
// get the applet's object on the bus.
484
GPtrArray *ctx = g_ptr_array_sized_new (4);
487
v = g_new0 (GValue, 1);
488
g_value_init (v, G_TYPE_STRING);
489
g_value_set_string (v, g_get_prgname());
490
g_ptr_array_add (ctx, v);
492
v = g_new0 (GValue, 1);
493
g_value_init (v, G_TYPE_STRING);
494
g_value_set_string (v, g_get_application_name());
495
g_ptr_array_add (ctx, v);
497
v = g_new0 (GValue, 1);
498
g_value_init (v, G_TYPE_STRING);
499
g_value_set_string (v, g_strdup_printf ("%s/%s/%s", ));
500
g_ptr_array_add (ctx, v);
b'\\ No newline at end of file'
1378
if (ic == NULL) // empty list, or didn't find a valid icon.
1379
cairo_dock_show_general_message (message, 1000 * iDuration);
1381
g_list_free (pList);