205
static gboolean on_delete_async_widget (GtkWidget *pMainWindow, GdkEvent *event, GtkWidget *pWidget)
207
//g_print ("%s ()\n", __func__);
208
CairoDockTask *pTask = g_object_get_data (G_OBJECT (pWidget), "cd-task");
211
cairo_dock_discard_task (pTask);
212
g_object_set_data (G_OBJECT (pWidget), "cd-task", NULL);
214
g_object_unref (G_OBJECT (pWidget));
218
static inline void _set_preview_image (const gchar *cPreviewFilePath, GtkImage *pPreviewImage)
220
int iPreviewWidth, iPreviewHeight;
221
GdkPixbuf *pPreviewPixbuf = NULL;
222
if (gdk_pixbuf_get_file_info (cPreviewFilePath, &iPreviewWidth, &iPreviewHeight) != NULL)
224
iPreviewWidth = MIN (iPreviewWidth, CAIRO_DOCK_PREVIEW_WIDTH);
225
iPreviewHeight = MIN (iPreviewHeight, CAIRO_DOCK_PREVIEW_HEIGHT);
226
g_print ("preview : %dx%d\n", iPreviewWidth, iPreviewHeight); //
227
pPreviewPixbuf = gdk_pixbuf_new_from_file_at_size (cPreviewFilePath, iPreviewWidth, iPreviewHeight, NULL);
229
if (pPreviewPixbuf == NULL)
231
pPreviewPixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
237
gtk_image_set_from_pixbuf (pPreviewImage, pPreviewPixbuf);
238
gdk_pixbuf_unref (pPreviewPixbuf);
241
static void _on_got_readme (const gchar *cDescription, GtkWidget *pDescriptionLabel)
243
//g_print ("%s ()\n", __func__);
244
gtk_label_set_markup (GTK_LABEL (pDescriptionLabel), cDescription ? cDescription : "");
246
CairoDockTask *pTask = g_object_get_data (G_OBJECT (pDescriptionLabel), "cd-task");
249
//g_print ("remove the task\n");
250
cairo_dock_discard_task (pTask);
251
g_object_set_data (G_OBJECT (pDescriptionLabel), "cd-task", NULL);
254
static void _on_got_preview_file (const gchar *cPreviewFilePath, GtkWidget *pPreviewImage)
256
if (cPreviewFilePath != NULL)
258
_set_preview_image (cPreviewFilePath, GTK_IMAGE (pPreviewImage));
259
g_remove (cPreviewFilePath);
261
CairoDockTask *pTask = g_object_get_data (G_OBJECT (pPreviewImage), "cd-task");
264
cairo_dock_discard_task (pTask);
265
g_object_set_data (G_OBJECT (pPreviewImage), "cd-task", NULL);
212
268
static void _cairo_dock_selection_changed (GtkTreeModel *model, GtkTreeIter iter, gpointer *data)
214
270
static gchar *s_cPrevPreview = NULL, *s_cPrevReadme = NULL;
215
271
GtkLabel *pDescriptionLabel = data[0];
272
gtk_label_set_justify (GTK_LABEL (pDescriptionLabel), GTK_JUSTIFY_FILL);
273
gtk_label_set_line_wrap (pDescriptionLabel, TRUE);
216
274
GtkImage *pPreviewImage = data[1];
217
275
GError *erreur = NULL;
218
gchar *cDescriptionFilePath = NULL, *cPreviewFilePath = NULL;
219
//g_print ("iter:%d\n", iter);
276
gchar *cDescriptionFilePath = NULL, *cPreviewFilePath = NULL, *cName = NULL;
220
277
gtk_tree_model_get (model, &iter,
221
278
CAIRO_DOCK_MODEL_DESCRIPTION_FILE, &cDescriptionFilePath,
222
279
CAIRO_DOCK_MODEL_IMAGE, &cPreviewFilePath, -1);
226
if (cDescriptionFilePath != NULL && (!s_cPrevPreview || strcmp (s_cPrevPreview, cDescriptionFilePath) != 0))
281
if (cDescriptionFilePath != NULL && (1 || !s_cPrevReadme || strcmp (s_cPrevReadme, cDescriptionFilePath) != 0))
228
g_free (s_cPrevPreview);
229
s_cPrevPreview = g_strdup (cDescriptionFilePath);
230
gchar *cDescription = NULL;
231
if (strncmp (cDescriptionFilePath, "http://", 7) == 0)
283
CairoDockTask *pTask = g_object_get_data (G_OBJECT (pDescriptionLabel), "cd-task");
284
//g_print ("prev task : %x\n", pTask);
287
cairo_dock_discard_task (pTask);
288
g_object_set_data (G_OBJECT (pDescriptionLabel), "cd-task", NULL);
290
g_free (s_cPrevReadme);
291
s_cPrevReadme = g_strdup (cDescriptionFilePath);
292
if (strncmp (cDescriptionFilePath, "http://", 7) == 0) // fichier distant.
233
294
cd_debug ("fichier readme distant (%s)", cDescriptionFilePath);
235
296
gchar *str = strrchr (cDescriptionFilePath, '/');
236
297
g_return_if_fail (str != NULL);
238
cDescription = cairo_dock_get_distant_file_content (cDescriptionFilePath, "", str+1, 0, NULL);
300
gtk_label_set_markup (pDescriptionLabel, "...");
301
pTask = cairo_dock_get_distant_file_content_async (cDescriptionFilePath, "", str+1, (GFunc) _on_got_readme, pDescriptionLabel);
302
g_object_set_data (G_OBJECT (pDescriptionLabel), "cd-task", pTask);
303
//g_print ("new task : %x\n", pTask);
305
else if (*cDescriptionFilePath == '/') // fichier local
242
cd_debug ("fichier readme local (%s)", cDescriptionFilePath);
243
307
gsize length = 0;
244
g_file_get_contents (cDescriptionFilePath,
308
gchar *cDescription = NULL;
309
g_file_get_contents (cDescriptionFilePath,
250
gtk_label_set_markup (pDescriptionLabel, cDescription ? cDescription : "");
251
g_free (cDescription);
313
gtk_label_set_markup (pDescriptionLabel, cDescription ? cDescription : "");
314
g_free (cDescription);
316
else if (strcmp (cDescriptionFilePath, "none") != 0) // texte de la description.
318
gtk_label_set_markup (pDescriptionLabel, cDescriptionFilePath);
321
gtk_label_set_markup (pDescriptionLabel, "");
254
if (cPreviewFilePath != NULL && (!s_cPrevReadme || strcmp (s_cPrevReadme, cPreviewFilePath) != 0))
324
if (cPreviewFilePath != NULL && (1 || !s_cPrevPreview || strcmp (s_cPrevPreview, cPreviewFilePath) != 0))
256
g_free (s_cPrevReadme);
257
s_cPrevReadme = g_strdup (cPreviewFilePath);
326
g_free (s_cPrevPreview);
327
s_cPrevPreview = g_strdup (cPreviewFilePath);
259
329
gboolean bDistant = FALSE;
260
if (strncmp (cPreviewFilePath, "http://", 7) == 0)
330
if (strncmp (cPreviewFilePath, "http://", 7) == 0) // fichier distant.
262
332
cd_debug ("fichier preview distant (%s)", cPreviewFilePath);
264
334
gchar *str = strrchr (cPreviewFilePath, '/');
265
335
g_return_if_fail (str != NULL);
267
gchar *cTmpFilePath = cairo_dock_download_file (cPreviewFilePath, "", str+1, 0, NULL, NULL);
269
g_free (cPreviewFilePath);
270
cPreviewFilePath = cTmpFilePath;
274
int iPreviewWidth, iPreviewHeight;
275
GdkPixbuf *pPreviewPixbuf = NULL;
276
if (gdk_pixbuf_get_file_info (cPreviewFilePath, &iPreviewWidth, &iPreviewHeight) != NULL)
278
iPreviewWidth = MIN (iPreviewWidth, CAIRO_DOCK_PREVIEW_WIDTH);
279
iPreviewHeight = MIN (iPreviewHeight, CAIRO_DOCK_PREVIEW_HEIGHT);
280
g_print ("preview : %dx%d\n", iPreviewWidth, iPreviewHeight);
281
pPreviewPixbuf = gdk_pixbuf_new_from_file_at_size (cPreviewFilePath, iPreviewWidth, iPreviewHeight, NULL);
283
if (pPreviewPixbuf == NULL)
285
pPreviewPixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
291
gtk_image_set_from_pixbuf (pPreviewImage, pPreviewPixbuf);
292
gdk_pixbuf_unref (pPreviewPixbuf);
296
g_remove (cPreviewFilePath);
338
CairoDockTask *pTask = g_object_get_data (G_OBJECT (pPreviewImage), "cd-task");
340
cairo_dock_discard_task (pTask);
342
pTask = cairo_dock_download_file_async (cPreviewFilePath, "", str+1, NULL, (GFunc) _on_got_preview_file, pPreviewImage);
343
g_object_set_data (G_OBJECT (pPreviewImage), "cd-task", pTask);
345
else // fichier local ou rien.
346
_set_preview_image (cPreviewFilePath, pPreviewImage);
300
349
g_free (cDescriptionFilePath);
301
350
g_free (cPreviewFilePath);
353
static void _cairo_dock_select_custom_item_in_combo (GtkComboBox *widget, gpointer *data)
355
GtkTreeModel *model = gtk_combo_box_get_model (widget);
356
g_return_if_fail (model != NULL);
359
if (!gtk_combo_box_get_active_iter (widget, &iter))
362
GtkWidget *parent = data[1];
363
GtkWidget *pKeyBox = data[0];
364
int iNbWidgets = GPOINTER_TO_INT (data[2]);
365
GList *children = gtk_container_get_children (GTK_CONTAINER (parent));
366
GList *c = g_list_find (children, pKeyBox);
367
g_return_if_fail (c != NULL && c->next != NULL);
370
gtk_tree_model_get (model, &iter,
371
CAIRO_DOCK_MODEL_RESULT, &cName, -1);
373
gboolean bActive = (cName != NULL && strcmp (cName, "personnal") == 0);
376
for (c = c->next, i = 0; c != NULL && i < iNbWidgets; c = c->next, i ++)
379
gtk_widget_set_sensitive (w, bActive);
382
g_list_free (children);
304
386
static void _cairo_dock_select_one_item_in_combo (GtkComboBox *widget, gpointer *data)
306
388
GtkTreeModel *model = gtk_combo_box_get_model (widget);
410
static void _cairo_dock_select_one_item_in_control_combo (GtkComboBox *widget, gpointer *data)
412
GtkTreeModel *model = gtk_combo_box_get_model (widget);
413
g_return_if_fail (model != NULL);
416
if (!gtk_combo_box_get_active_iter (widget, &iter))
419
int iNumItem = gtk_combo_box_get_active (widget);
420
//gtk_tree_model_get (model, &iter, CAIRO_DOCK_MODEL_ORDER, &iNumItem, -1);
422
GtkWidget *parent = data[1];
423
GtkWidget *pKeyBox = data[0];
424
int iNbWidgets = GPOINTER_TO_INT (data[2]);
425
GList *children = gtk_container_get_children (GTK_CONTAINER (parent));
426
GList *c = g_list_find (children, pKeyBox);
427
g_return_if_fail (c != NULL);
431
for (c = c->next, i = 0; c != NULL && i < iNbWidgets; c = c->next, i ++)
434
//g_print (" %d/%d -> %d\n", i, iNbWidgets, i == iNumItem);
435
if (GTK_IS_EXPANDER (w))
437
gtk_expander_set_expanded (GTK_EXPANDER (w), i == iNumItem);
441
gtk_widget_set_sensitive (w, i == iNumItem);
445
g_list_free (children);
447
static void _cairo_dock_select_one_item_in_control_combo_selective (GtkComboBox *widget, gpointer *data)
449
GtkTreeModel *model = gtk_combo_box_get_model (widget);
450
g_return_if_fail (model != NULL);
453
if (!gtk_combo_box_get_active_iter (widget, &iter))
456
int iOrder1, iOrder2;
457
gtk_tree_model_get (model, &iter,
458
CAIRO_DOCK_MODEL_ORDER, &iOrder1,
459
CAIRO_DOCK_MODEL_ORDER2, &iOrder2, -1);
461
GtkWidget *parent = data[1];
462
GtkWidget *pKeyBox = data[0];
463
int iNbWidgets = GPOINTER_TO_INT (data[2]);
464
//g_print ("%s (%d, %d / %d)\n", __func__, iOrder1, iOrder2, iNbWidgets);
465
GList *children = gtk_container_get_children (GTK_CONTAINER (parent));
466
GList *c = g_list_find (children, pKeyBox);
467
g_return_if_fail (c != NULL);
471
for (c = c->next, i = 0; c != NULL && i < iNbWidgets; c = c->next, i ++)
474
//g_print ("%d in ]%d;%d[\n", i, iOrder1, iOrder1 + iOrder2);
475
gtk_widget_set_sensitive (w, i >= iOrder1 - 1 && i < iOrder1 + iOrder2 - 1);
478
g_list_free (children);
329
481
static void _cairo_dock_show_image_preview (GtkFileChooser *pFileChooser, GtkImage *pPreviewImage)
474
643
g_signal_connect (GTK_WIDGET(pParentWindow), "key-press-event", GTK_SIGNAL_FUNC(_cairo_dock_key_grab_cb), pEntry);
477
static void _cairo_dock_set_font (GtkFontButton *widget, GtkEntry *pEntry)
479
const gchar *cFontName = gtk_font_button_get_font_name (GTK_FONT_BUTTON (widget));
480
cd_message (" -> %s\n", cFontName);
481
PangoFontDescription *fd = pango_font_description_from_string (cFontName);
482
g_print ("familly : %s\n", pango_font_description_get_family (fd));
483
g_print ("style : %d\n", pango_font_description_get_style (fd));
484
g_print ("weight : %d\n", pango_font_description_get_weight (fd));
485
g_print ("size : %d\n", pango_font_description_get_size (fd));
487
if (cFontName != NULL)
488
gtk_entry_set_text (pEntry, cFontName);
491
static void _cairo_dock_set_color (GtkColorButton *pColorButton, GSList *pWidgetList)
494
gtk_color_button_get_color (pColorButton, &gdkColor);
496
GtkSpinButton *pSpinButton;
497
GSList *pList = pWidgetList;
500
pSpinButton = pList->data;
501
gtk_spin_button_set_value (pSpinButton, 1. * gdkColor.red / 65535);
506
pSpinButton = pList->data;
507
gtk_spin_button_set_value (pSpinButton, 1. * gdkColor.green / 65535);
512
pSpinButton = pList->data;
513
gtk_spin_button_set_value (pSpinButton, 1. * gdkColor.blue / 65535);
516
if (gtk_color_button_get_use_alpha (pColorButton))
520
pSpinButton = pList->data;
521
gtk_spin_button_set_value (pSpinButton, 1. * gtk_color_button_get_alpha (pColorButton) / 65535);
525
static void _cairo_dock_get_current_color (GtkColorButton *pColorButton, GSList *pWidgetList)
527
GtkSpinButton *pSpinButton;
528
int i, color[4] = {0,0,0,0};
530
for (c = pWidgetList, i = 0; c != NULL && i < 4; c = c->next, i ++)
532
pSpinButton = c->data;
533
color[i] = gtk_spin_button_get_value (pSpinButton) * 65535;
537
gdkColor.red = color[0];
538
gdkColor.green = color[1];
539
gdkColor.blue = color[2];
540
gtk_color_button_set_color (pColorButton, &gdkColor);
542
if (gtk_color_button_get_use_alpha (pColorButton))
543
gtk_color_button_set_alpha (pColorButton, color[3]);
646
static void _cairo_dock_key_grab_class (GtkButton *button, gpointer *data)
648
GtkEntry *pEntry = data[0];
649
GtkWindow *pParentWindow = data[1];
651
cd_message ("clicked\n");
652
gtk_widget_set_sensitive (GTK_WIDGET(pEntry), FALSE); // locked (plus zoli :) )
654
gchar *cProp = cairo_dock_launch_command_sync ("xprop"); // avec "| grep CLASS | cut -d\\\" -f2", ca ne fonctionne pas et Fab n'aime pas les g_spawn_command_line_sync :) --> c'est surtout que c'est g_spawn_command_line_sync qui n'aime pas les grep.
656
gchar *str = g_strstr_len (cProp, -1, "WM_CLASS(STRING)"); // str pointant sur WM_
657
gchar *cResult = NULL; // NON CE N'EST PAS MA MOYENNE DE POINT !!!!
660
// WM_CLASS(STRING) = "gnome-terminal", "Gnome-terminal" \\ => utiliser le 2è
661
str = strchr (str, ',');
663
gchar *max = strchr (str, '"'); // on pointe le 2e "
665
cResult = g_strndup (str, max - str); // on prend ce qui est entre ""
668
cd_warning ("couldn't find the class of this window.");
670
gtk_widget_set_sensitive (GTK_WIDGET(pEntry), TRUE); // unlocked
671
gtk_entry_set_text (pEntry, cResult); // on ajoute le txt dans le box des accuses
672
g_free (cProp); // Ah, mnt C Propr' !
673
g_free (cResult); // Ou qu'elle est la poulette ???
546
676
void _cairo_dock_set_value_in_pair (GtkSpinButton *pSpinButton, gpointer *data)
691
static void _cairo_dock_toggle_control_button (GtkCheckButton *pButton, gpointer *data)
693
GtkWidget *parent = data[1];
694
GtkWidget *pKeyBox = data[0];
695
int iNbWidgets = GPOINTER_TO_INT (data[2]);
697
GList *children = gtk_container_get_children (GTK_CONTAINER (parent));
698
GList *c = g_list_find (children, pKeyBox);
699
g_return_if_fail (c != NULL);
701
gboolean bActive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pButton));
704
for (c = c->next, i = 0; c != NULL && i < iNbWidgets; c = c->next, i ++)
707
g_print (" %d/%d -> %d\n", i, iNbWidgets, bActive);
708
gtk_widget_set_sensitive (w, bActive);
711
g_list_free (children);
714
static void _list_icon_theme_in_dir (const gchar *cDirPath, GHashTable *pHashTable)
716
GError *erreur = NULL;
717
GDir *dir = g_dir_open (cDirPath, 0, &erreur);
720
cd_warning ("%s\n", erreur->message);
721
g_error_free (erreur);
725
const gchar *cFileName;
728
GString *sIndexFile = g_string_new ("");
729
while ((cFileName = g_dir_read_name (dir)) != NULL)
731
g_string_printf (sIndexFile, "%s/%s/index.theme", cDirPath, cFileName);
732
if (! g_file_test (sIndexFile->str, G_FILE_TEST_EXISTS))
735
GKeyFile *pKeyFile = cairo_dock_open_key_file (sIndexFile->str);
736
if (pKeyFile == NULL)
739
if (! g_key_file_get_boolean (pKeyFile, "Icon Theme", "Hidden", NULL) && g_key_file_has_key (pKeyFile, "Icon Theme", "Directories", NULL))
741
gchar *cName = g_key_file_get_string (pKeyFile, "Icon Theme", "Name", NULL);
744
g_hash_table_insert (pHashTable, cName, g_strdup (cName));
748
g_key_file_free (pKeyFile);
750
g_string_free (sIndexFile, TRUE);
754
static GHashTable *_cairo_dock_build_icon_themes_list (const gchar **cDirs)
756
GHashTable *pHashTable = g_hash_table_new_full (g_str_hash,
760
gchar *cName = g_strdup (N_("_Custom Icons_"));
761
g_hash_table_insert (pHashTable, cName, g_strdup (gettext (cName)));
764
for (i = 0; cDirs[i] != NULL; i ++)
766
_list_icon_theme_in_dir (cDirs[i], pHashTable);
771
static gboolean _add_module_to_modele (gchar *cModuleName, CairoDockModule *pModule, gpointer *data)
773
int iCategory = GPOINTER_TO_INT (data[0]);
774
if (pModule->pVisitCard->iCategory == iCategory || (iCategory == -1 && pModule->pVisitCard->iCategory != CAIRO_DOCK_CATEGORY_SYSTEM && pModule->pVisitCard->iCategory != CAIRO_DOCK_CATEGORY_THEME && ! cairo_dock_module_is_auto_loaded (pModule)))
776
//g_print (" + %s\n", pModule->pVisitCard->cIconFilePath);
777
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_size (pModule->pVisitCard->cIconFilePath, 32, 32, NULL);
778
GtkListStore *pModele = data[1];
780
memset (&iter, 0, sizeof (GtkTreeIter));
781
gtk_list_store_append (GTK_LIST_STORE (pModele), &iter);
782
gtk_list_store_set (GTK_LIST_STORE (pModele), &iter,
783
CAIRO_DOCK_MODEL_NAME, dgettext (pModule->pVisitCard->cGettextDomain, pModule->pVisitCard->cModuleName), /// cTitle ?...
784
CAIRO_DOCK_MODEL_RESULT, cModuleName,
785
CAIRO_DOCK_MODEL_DESCRIPTION_FILE, dgettext (pModule->pVisitCard->cGettextDomain, pModule->pVisitCard->cDescription),
786
CAIRO_DOCK_MODEL_IMAGE, pModule->pVisitCard->cPreviewFilePath,
787
CAIRO_DOCK_MODEL_ICON, pixbuf,
788
CAIRO_DOCK_MODEL_STATE, pModule->pVisitCard->iCategory,
789
CAIRO_DOCK_MODEL_ACTIVE, (pModule->pInstancesList != NULL), -1);
790
g_object_unref (pixbuf);
795
static void _cairo_dock_activate_one_module (GtkCellRendererToggle * cell_renderer, gchar * path, GtkTreeModel * model)
798
if (! gtk_tree_model_get_iter_from_string (model, &iter, path))
800
gchar *cModuleName = NULL;
802
gtk_tree_model_get (model, &iter,
803
CAIRO_DOCK_MODEL_RESULT, &cModuleName,
804
CAIRO_DOCK_MODEL_ACTIVE, &bState, -1);
807
gtk_list_store_set (GTK_LIST_STORE (model), &iter, CAIRO_DOCK_MODEL_ACTIVE, bState, -1);
809
/// passer en gras ?...
811
CairoDockModule *pModule = cairo_dock_find_module_from_name (cModuleName);
812
if (g_pMainDock == NULL)
814
cairo_dock_add_remove_element_to_key (g_cConfFile, "System", "modules", cModuleName, bState);
816
else if (pModule->pInstancesList == NULL)
818
cairo_dock_activate_module_and_load (cModuleName);
822
cairo_dock_deactivate_module_and_unload (cModuleName);
824
g_free (cModuleName);
562
827
#define _build_list_for_gui(pListStore, cEmptyItem, pHashTable, pHFunction) do { \
563
828
if (pListStore != NULL)\
681
944
cairo_dock_foreach_docks ((GHFunc) _cairo_dock_add_one_dock_item, s_pDocksListStore);
684
static void _cairo_dock_fill_modele_with_themes (const gchar *cThemeName, CairoDockTheme *pTheme, GtkListStore *pModele)
947
static void _cairo_dock_add_one_icon_theme_item (const gchar *cName, const gchar *cDisplayedName, GtkListStore *pModele)
950
memset (&iter, 0, sizeof (GtkTreeIter));
951
gtk_list_store_append (GTK_LIST_STORE (pModele), &iter);
952
//g_print ("+ %s (%s)\n", cName, cDisplayedName);
953
gtk_list_store_set (GTK_LIST_STORE (pModele), &iter,
954
CAIRO_DOCK_MODEL_NAME, cDisplayedName,
955
CAIRO_DOCK_MODEL_RESULT, cName,
956
CAIRO_DOCK_MODEL_DESCRIPTION_FILE, "none",
957
CAIRO_DOCK_MODEL_IMAGE, "none", -1);
959
static void cairo_dock_build_icon_theme_list_for_gui (GHashTable *pHashTable)
961
_build_list_for_gui (s_pIconThemeListStore, "", pHashTable, _cairo_dock_add_one_icon_theme_item);
964
static inline void _fill_modele_with_themes (const gchar *cThemeName, CairoDockTheme *pTheme, GtkListStore *pModele, gboolean bShowState, gboolean bInsertState)
686
966
GtkTreeIter iter;
687
967
memset (&iter, 0, sizeof (GtkTreeIter));
688
968
gtk_list_store_append (GTK_LIST_STORE (pModele), &iter);
689
969
gchar *cReadmePath = g_strdup_printf ("%s/readme", pTheme->cThemePath);
690
970
gchar *cPreviewPath = g_strdup_printf ("%s/preview", pTheme->cThemePath);
971
gchar *cResult = (bInsertState ? g_strdup_printf ("%s[%d]", cThemeName, pTheme->iType) : NULL);
972
gchar *cDisplayedName = NULL;
976
switch (pTheme->iType)
978
case CAIRO_DOCK_LOCAL_THEME: cType = "(Local) "; break;
979
case CAIRO_DOCK_USER_THEME: cType = "(User) "; break;
980
case CAIRO_DOCK_DISTANT_THEME: cType = "(Net) "; break;
981
case CAIRO_DOCK_NEW_THEME: cType = "(New) "; break;
982
case CAIRO_DOCK_UPDATED_THEME: cType = "(Updated)"; break;
983
default: cType = ""; break;
985
cDisplayedName = g_strconcat (cType, pTheme->cDisplayedName, NULL);
691
987
gtk_list_store_set (GTK_LIST_STORE (pModele), &iter,
692
CAIRO_DOCK_MODEL_NAME, pTheme->cDisplayedName,
693
CAIRO_DOCK_MODEL_RESULT, cThemeName,
988
CAIRO_DOCK_MODEL_NAME, cDisplayedName ? cDisplayedName : pTheme->cDisplayedName,
989
CAIRO_DOCK_MODEL_RESULT, cResult ? cResult : cThemeName,
694
990
CAIRO_DOCK_MODEL_ACTIVE, FALSE,
695
991
CAIRO_DOCK_MODEL_DESCRIPTION_FILE, cReadmePath,
696
992
CAIRO_DOCK_MODEL_IMAGE, cPreviewPath,
697
993
CAIRO_DOCK_MODEL_ORDER, pTheme->iRating,
698
CAIRO_DOCK_MODEL_ORDER2, pTheme->iSobriety, -1);
994
CAIRO_DOCK_MODEL_ORDER2, pTheme->iSobriety,
995
CAIRO_DOCK_MODEL_STATE, pTheme->iType, -1);
996
g_free (cReadmePath);
997
g_free (cPreviewPath);
1000
g_free (cDisplayedName);
1002
static void _cairo_dock_fill_modele_with_themes (const gchar *cThemeName, CairoDockTheme *pTheme, GtkListStore *pModele)
1004
_fill_modele_with_themes (cThemeName, pTheme, pModele, FALSE, TRUE);
1006
static void _cairo_dock_fill_modele_with_short_themes (const gchar *cThemeName, CairoDockTheme *pTheme, GtkListStore *pModele)
1008
_fill_modele_with_themes (cThemeName, pTheme, pModele, TRUE, TRUE);
1011
static void _got_themes_list (GHashTable *pThemeTable, gpointer *data)
1013
if (pThemeTable == NULL)
1015
cairo_dock_set_status_message (data[1], "Couldn't list available themes (is connection alive ?)");
1019
cairo_dock_set_status_message (data[1], "");
1020
GtkWidget *pTreeView = data[0];
1021
GtkListStore *modele = gtk_tree_view_get_model (GTK_TREE_VIEW (pTreeView));
1022
g_hash_table_foreach (pThemeTable, (GHFunc)_cairo_dock_fill_modele_with_themes, modele);
1025
static void _got_themes_combo_list (GHashTable *pThemeTable, gpointer *data)
1027
if (pThemeTable == NULL)
1029
cairo_dock_set_status_message (data[1], "Couldn't list available themes (is connection alive ?)");
1033
cairo_dock_set_status_message (data[1], "");
1034
GtkWidget *pCombo = data[0];
1036
gchar *cValue = data[2];
1037
cairo_dock_fill_combo_with_themes (pCombo, pThemeTable, cValue);
700
1042
static gboolean _cairo_dock_test_one_name (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer *data)
702
1044
gchar *cName = NULL, *cResult = NULL;
703
1045
gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_RESULT, &cResult, -1);
704
1046
if (cResult == NULL)
705
1047
gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_NAME, &cName, -1);
1049
cairo_dock_extract_theme_type_from_name (cResult);
706
1050
if ((cResult && strcmp (data[0], cResult) == 0) || (cName && strcmp (data[0], cName) == 0))
708
1052
GtkTreeIter *iter_to_fill = data[1];
717
1061
g_free (cResult);
720
static gboolean _cairo_dock_find_iter_from_name (GtkListStore *pModele, const gchar *cName, GtkTreeIter *iter)
1064
static gboolean _cairo_dock_find_iter_from_name (GtkListStore *pModele, const gchar *cName, GtkTreeIter *iter, gboolean bIsTheme)
722
1066
//g_print ("%s (%s)\n", __func__, cName);
723
1067
if (cName == NULL)
725
1069
gboolean bFound = FALSE;
726
gconstpointer data[3] = {cName, iter, &bFound};
1070
gconstpointer data[4] = {cName, iter, &bFound, GINT_TO_POINTER (bIsTheme)};
727
1071
gtk_tree_model_foreach (GTK_TREE_MODEL (pModele), (GtkTreeModelForeachFunc) _cairo_dock_test_one_name, data);
1075
static void _cairo_dock_render_module_name (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model,GtkTreeIter *iter, gpointer data)
1077
gboolean bActive = FALSE;
1078
gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_ACTIVE, &bActive, -1);
1081
g_object_set (cell, "weight", 800, "weight-set", TRUE, NULL);
1083
g_object_set (cell, "weight", 400, "weight-set", FALSE, NULL);
1086
static void _cairo_dock_render_category (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model,GtkTreeIter *iter, gpointer data)
1088
const gchar *cCategory=NULL;
1090
gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_STATE, &iCategory, -1);
1093
case CAIRO_DOCK_CATEGORY_APPLET_ACCESSORY:
1094
cCategory = _("Accessory");
1095
g_object_set (cell, "foreground", "#900009", NULL); // rouge
1096
g_object_set (cell, "foreground-set", TRUE, NULL);
1098
case CAIRO_DOCK_CATEGORY_APPLET_DESKTOP:
1099
cCategory = _("Desktop");
1100
g_object_set (cell, "foreground", "#116E08", NULL); // vert
1101
g_object_set (cell, "foreground-set", TRUE, NULL);
1103
case CAIRO_DOCK_CATEGORY_APPLET_CONTROLER:
1104
cCategory = _("Controler");
1105
g_object_set (cell, "foreground", "#004EA1", NULL); // bleu
1106
g_object_set (cell, "foreground-set", TRUE, NULL);
1108
case CAIRO_DOCK_CATEGORY_PLUG_IN:
1109
cCategory = _("Plug-in");
1110
g_object_set (cell, "foreground", "#A58B0D", NULL); // jaune
1111
g_object_set (cell, "foreground-set", TRUE, NULL);
1114
if (cCategory != NULL)
1116
g_object_set (cell, "text", cCategory, NULL);
731
1120
#define CD_MAX_RATING 5
732
1121
static inline void _render_rating (GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, int iColumnIndex)
760
1149
/// ignorer les themes "default"...
761
1150
_render_rating (cell, model, iter, CAIRO_DOCK_MODEL_ORDER);
1152
static void _cairo_dock_render_state (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model,GtkTreeIter *iter, gpointer data)
1154
const gchar *cState=NULL;
1156
gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_STATE, &iState, -1);
1159
case CAIRO_DOCK_LOCAL_THEME:
1160
cState = _("Local");
1161
g_object_set (cell, "foreground-set", FALSE, NULL);
1163
case CAIRO_DOCK_USER_THEME:
1165
g_object_set (cell, "foreground-set", FALSE, NULL);
1167
case CAIRO_DOCK_DISTANT_THEME:
1169
g_object_set (cell, "foreground-set", FALSE, NULL);
1171
case CAIRO_DOCK_NEW_THEME:
1173
g_object_set (cell, "foreground", "#FF0000", NULL); // "red"
1174
g_object_set (cell, "foreground-set", TRUE, NULL);
1176
case CAIRO_DOCK_UPDATED_THEME:
1177
cState = _("Updated");
1178
g_object_set (cell, "foreground", "#FF0000", NULL); // "red"
1179
g_object_set (cell, "foreground-set", TRUE, NULL);
1186
g_object_set (cell, "text", cState, NULL);
763
1189
static GtkListStore *_make_note_list_store (void)
765
1191
GString *s = g_string_sized_new (CD_MAX_RATING*4+1);
807
1233
//g_print ("iRating : %d\n", iRating);
809
gchar *cDisplayedName = NULL, *cThemeName = NULL;
810
gtk_tree_model_get (model, &it, CAIRO_DOCK_MODEL_NAME, &cDisplayedName, CAIRO_DOCK_MODEL_RESULT, &cThemeName, -1);
811
g_return_if_fail (cDisplayedName != NULL && cThemeName != NULL);
1235
gchar /** *cDisplayedName = NULL, */*cThemeName = NULL;
1237
gtk_tree_model_get (model, &it,
1238
///CAIRO_DOCK_MODEL_NAME, &cDisplayedName,
1239
CAIRO_DOCK_MODEL_RESULT, &cThemeName,
1240
CAIRO_DOCK_MODEL_STATE, &iState, -1);
1241
g_return_if_fail (/**cDisplayedName != NULL && */cThemeName != NULL);
812
1242
//g_print ("theme : %s / %s\n", cThemeName, cDisplayedName);
814
1244
gchar *cRatingDir = g_strdup_printf ("%s/%s/.rating", g_cCairoDockDataDir, "themes"); // il y'a un probleme ici, on ne connait pas le repertoire utilisateur des themes. donc ce code ne marche que pour les themes du dock (et n'est utilise que pour ca)
815
1245
gchar *cRatingFile = g_strdup_printf ("%s/%s", cRatingDir, cThemeName);
816
1246
//g_print ("on ecrit dans %s\n", cRatingFile);
817
if (strncmp (cDisplayedName, CAIRO_DOCK_PREFIX_NET_THEME, strlen (CAIRO_DOCK_PREFIX_NET_THEME)) != 0 || g_file_test (cRatingFile, G_FILE_TEST_EXISTS)) // ca n'est pas un theme distant, ou l'utilisateur a deja vote auparavant pour ce theme.
1247
if (iState == CAIRO_DOCK_USER_THEME || iState == CAIRO_DOCK_LOCAL_THEME/**strncmp (cDisplayedName, CAIRO_DOCK_PREFIX_NET_THEME, strlen (CAIRO_DOCK_PREFIX_NET_THEME)) != 0*/ || g_file_test (cRatingFile, G_FILE_TEST_EXISTS)) // ca n'est pas un theme distant, ou l'utilisateur a deja vote auparavant pour ce theme.
819
1249
if (!g_file_test (cRatingDir, G_FILE_TEST_IS_DIR))
902
1323
#define _pack_subwidget(pSubWidget) do {\
903
1324
pSubWidgetList = g_slist_append (pSubWidgetList, pSubWidget);\
904
1325
_pack_in_widget_box (pSubWidget); } while (0)
1326
#define _pack_hscale(pSubWidget) do {\
1327
GtkWidget *pExtendedWidget;\
1328
if (pAuthorizedValuesList != NULL && pAuthorizedValuesList[0] != NULL && pAuthorizedValuesList[1] != NULL && pAuthorizedValuesList[2] != NULL && pAuthorizedValuesList[3] != NULL) {\
1329
pExtendedWidget = gtk_hbox_new (FALSE, 0);\
1330
GtkWidget *label = gtk_label_new (dgettext (cGettextDomain, pAuthorizedValuesList[2]));\
1331
GtkWidget *pAlign = gtk_alignment_new (1., 1., 0., 0.);\
1332
gtk_container_add (GTK_CONTAINER (pAlign), label);\
1333
gtk_box_pack_start (GTK_BOX (pExtendedWidget), pAlign, FALSE, FALSE, 0);\
1334
gtk_box_pack_start (GTK_BOX (pExtendedWidget), pSubWidget, FALSE, FALSE, 0);\
1335
label = gtk_label_new (dgettext (cGettextDomain, pAuthorizedValuesList[3]));\
1336
pAlign = gtk_alignment_new (1., 1., 0., 0.);\
1337
gtk_container_add (GTK_CONTAINER (pAlign), label);\
1338
gtk_box_pack_start (GTK_BOX (pExtendedWidget), pAlign, FALSE, FALSE, 0); }\
1340
pExtendedWidget = pOneWidget; }\
1341
pSubWidgetList = g_slist_append (pSubWidgetList, pSubWidget);\
1342
_pack_in_widget_box (pExtendedWidget); } while (0)
905
1343
#define _add_combo_from_modele(modele, bAddPreviewWidgets, bWithEntry) do {\
906
1344
if (modele == NULL) { \
907
1345
pOneWidget = gtk_combo_box_entry_new ();\
908
1346
_pack_subwidget (pOneWidget); }\
910
1348
cValue = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, NULL);\
911
pOneWidget = (bWithEntry ? gtk_combo_box_entry_new_with_model (GTK_TREE_MODEL (modele), CAIRO_DOCK_MODEL_NAME) : gtk_combo_box_new_with_model (GTK_TREE_MODEL (modele)));\
912
rend = gtk_cell_renderer_text_new ();\
913
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (pOneWidget), rend, FALSE);\
914
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (pOneWidget), rend, "text", CAIRO_DOCK_MODEL_NAME, NULL);\
1350
pOneWidget = gtk_combo_box_entry_new_with_model (GTK_TREE_MODEL (modele), CAIRO_DOCK_MODEL_NAME); }\
1352
pOneWidget = gtk_combo_box_new_with_model (GTK_TREE_MODEL (modele));\
1353
rend = gtk_cell_renderer_text_new ();\
1354
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (pOneWidget), rend, FALSE);\
1355
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (pOneWidget), rend, "text", CAIRO_DOCK_MODEL_NAME, NULL);}\
915
1356
if (bAddPreviewWidgets) {\
916
1357
pDescriptionLabel = gtk_label_new (NULL);\
1358
g_signal_connect (pMainWindow, "destroy-event", G_CALLBACK (on_delete_async_widget), pDescriptionLabel);\
1359
g_object_ref (pDescriptionLabel);\
917
1360
gtk_label_set_use_markup (GTK_LABEL (pDescriptionLabel), TRUE);\
1361
gtk_widget_set_size_request (pDescriptionLabel, 500, CAIRO_DOCK_PREVIEW_HEIGHT);\
1362
gtk_label_set_justify (GTK_LABEL (pDescriptionLabel), GTK_JUSTIFY_LEFT);\
1363
gtk_label_set_line_wrap (GTK_LABEL (pDescriptionLabel), TRUE);\
918
1364
pPreviewImage = gtk_image_new_from_pixbuf (NULL);\
1365
g_signal_connect (pMainWindow, "delete-event", G_CALLBACK (on_delete_async_widget), pPreviewImage);\
1366
g_object_ref (pPreviewImage);\
1367
gtk_widget_set (pPreviewImage, "height-request", CAIRO_DOCK_PREVIEW_HEIGHT, "width-request", CAIRO_DOCK_PREVIEW_WIDTH, NULL);\
919
1368
_allocate_new_buffer;\
920
1369
data[0] = pDescriptionLabel;\
921
1370
data[1] = pPreviewImage;\
1177
1637
pKeyBox = (bIsAligned ? gtk_hbox_new : gtk_vbox_new) (FALSE, CAIRO_DOCK_GUI_MARGIN);
1178
gtk_box_pack_start (pFrameVBox != NULL ? GTK_BOX (pFrameVBox) : GTK_BOX (pGroupBox),
1638
gtk_box_pack_start (pFrameVBox != NULL ? GTK_BOX (pFrameVBox) : GTK_BOX (pGroupBox),
1184
if (pTipString != NULL)
1186
gtk_widget_set_tooltip_text (pKeyBox, dgettext (cGettextDomain, pTipString));
1645
if (cTipString != NULL)
1647
gtk_widget_set_tooltip_text (pKeyBox, dgettext (cGettextDomain, cTipString));
1649
if (iNbControlledWidgets > 0 && pControlContainer != NULL)
1651
//g_print ("ctrl (%d widgets)\n", iNbControlledWidgets);
1652
if (pControlContainer == (pFrameVBox ? pFrameVBox : pGroupBox))
1654
//g_print ("ctrl (iNbControlledWidgets:%d, iFirstSensitiveWidget:%d, iNbSensitiveWidgets:%d)\n", iNbControlledWidgets, iFirstSensitiveWidget, iNbSensitiveWidgets);
1655
iNbControlledWidgets --;
1656
if (iFirstSensitiveWidget > 0)
1657
iFirstSensitiveWidget --;
1659
GtkWidget *w = (pAdditionalItemsVBox ? pAdditionalItemsVBox : pKeyBox);
1660
if (iFirstSensitiveWidget == 0 && iNbSensitiveWidgets > 0)
1662
//g_print (" => sensitive\n");
1663
iNbSensitiveWidgets --;
1664
if (GTK_IS_EXPANDER (w))
1665
gtk_expander_set_expanded (GTK_EXPANDER (w), TRUE);
1669
//g_print (" => unsensitive\n");
1670
if (!GTK_IS_EXPANDER (w))
1671
gtk_widget_set_sensitive (w, FALSE);
1189
1676
//\______________ On cree le label descriptif et la boite du widget.
1190
1677
if (iElementType != CAIRO_DOCK_WIDGET_EMPTY_WIDGET)
1192
if (*cUsefulComment != '\0' && strcmp (cUsefulComment, "...") != 0)
1680
if (iElementType == CAIRO_DOCK_WIDGET_HANDBOOK)
1682
cValue = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, NULL);
1683
CairoDockModule *pModule = cairo_dock_find_module_from_name (cValue);
1684
if (pModule != NULL)
1686
gchar *cDescription = g_strdup_printf ("%s (v%s) by %s\n%s",
1687
pModule->pVisitCard->cModuleName,
1688
pModule->pVisitCard->cModuleVersion,
1689
pModule->pVisitCard->cAuthor,
1690
dgettext (pModule->pVisitCard->cGettextDomain,
1691
pModule->pVisitCard->cDescription));
1692
pLabel = gtk_label_new (cDescription);
1693
gtk_widget_set (pLabel, "width-request", 500, NULL); // CAIRO_DOCK_PREVIEW_WIDTH
1694
gtk_label_set_justify (GTK_LABEL (pLabel), GTK_JUSTIFY_LEFT);
1695
gtk_label_set_line_wrap (GTK_LABEL (pLabel), TRUE);
1696
g_free (cDescription);
1700
else if (*cUsefulComment != '\0' && strcmp (cUsefulComment, "...") != 0)
1194
1702
pLabel = gtk_label_new (NULL);
1195
1703
gtk_label_set_use_markup (GTK_LABEL (pLabel), TRUE);
1196
1704
gtk_label_set_markup (GTK_LABEL (pLabel), dgettext (cGettextDomain, cUsefulComment));
1197
1708
GtkWidget *pAlign = gtk_alignment_new (0., 0.5, 0., 0.);
1198
1709
gtk_container_add (GTK_CONTAINER (pAlign), pLabel);
1199
1710
gtk_box_pack_start (GTK_BOX (pKeyBox),
1317
1853
case CAIRO_DOCK_WIDGET_SPIN_DOUBLE : // float.
1318
case CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGB : // float x3 avec un bouton de choix de couleur.
1319
case CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGBA : // float x4 avec un bouton de choix de couleur.
1320
1854
case CAIRO_DOCK_WIDGET_HSCALE_DOUBLE : // float dans un HScale.
1321
if (iElementType == CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGB || iElementType == CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGBA) // couleur
1855
if (pAuthorizedValuesList != NULL && pAuthorizedValuesList[0] != NULL)
1856
fMinValue = g_ascii_strtod (pAuthorizedValuesList[0], NULL);
1325
if (iNbElements == 1) // nbre d'elements non precise
1327
iNbElements = (iElementType == CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGB ? 3 : 4);
1859
if (pAuthorizedValuesList != NULL && pAuthorizedValuesList[1] != NULL)
1860
fMaxValue = g_ascii_strtod (pAuthorizedValuesList[1], NULL);
1332
if (pAuthorizedValuesList != NULL && pAuthorizedValuesList[0] != NULL)
1333
fMinValue = g_ascii_strtod (pAuthorizedValuesList[0], NULL);
1336
if (pAuthorizedValuesList != NULL && pAuthorizedValuesList[1] != NULL)
1337
fMaxValue = g_ascii_strtod (pAuthorizedValuesList[1], NULL);
1342
1864
fValueList = g_key_file_get_double_list (pKeyFile, cGroupName, cKeyName, &length, NULL);
1343
1865
for (k = 0; k < iNbElements; k ++)
1345
1867
fValue = (k < length ? fValueList[k] : 0);
1347
1869
GtkObject *pAdjustment = gtk_adjustment_new (fValue,
1350
1872
(fMaxValue - fMinValue) / 20.,
1351
1873
(fMaxValue - fMinValue) / 10.,
1354
1876
if (iElementType == CAIRO_DOCK_WIDGET_HSCALE_DOUBLE)
1356
1878
pOneWidget = gtk_hscale_new (GTK_ADJUSTMENT (pAdjustment));
1357
1879
gtk_scale_set_digits (GTK_SCALE (pOneWidget), 3);
1358
1880
gtk_widget_set (pOneWidget, "width-request", 150, NULL);
1882
_pack_hscale (pOneWidget);
1362
1886
pOneWidget = gtk_spin_button_new (GTK_ADJUSTMENT (pAdjustment),
1889
_pack_subwidget (pOneWidget);
1366
1891
g_object_set (pAdjustment, "lower", fMinValue, "upper", fMaxValue, NULL); // le 'width-request' sur un GtkHScale avec 'fMinValue' non nul plante ! Donc on les met apres...
1367
1892
gtk_adjustment_set_value (GTK_ADJUSTMENT (pAdjustment), fValue);
1369
_pack_subwidget (pOneWidget);
1371
if (iElementType == CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGB || iElementType == CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGBA)
1375
gdkColor.red = fValueList[0] * 65535;
1376
gdkColor.green = fValueList[1] * 65535;
1377
gdkColor.blue = fValueList[2] * 65535;
1379
pColorButton = gtk_color_button_new_with_color (&gdkColor);
1380
if (iNbElements > 3)
1382
gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (pColorButton), TRUE);
1384
gtk_color_button_set_alpha (GTK_COLOR_BUTTON (pColorButton), fValueList[3] * 65535);
1386
gtk_color_button_set_alpha (GTK_COLOR_BUTTON (pColorButton), 65535);
1894
bAddBackButton = TRUE,
1895
g_free (fValueList);
1898
case CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGB : // float x3 avec un bouton de choix de couleur.
1899
case CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGBA : // float x4 avec un bouton de choix de couleur.
1900
iNbElements = (iElementType == CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGB ? 3 : 4);
1902
fValueList = g_key_file_get_double_list (pKeyFile, cGroupName, cKeyName, &length, NULL);
1905
gdkColor.red = fValueList[0] * 65535;
1906
gdkColor.green = fValueList[1] * 65535;
1907
gdkColor.blue = fValueList[2] * 65535;
1909
pOneWidget = gtk_color_button_new_with_color (&gdkColor);
1910
if (iElementType == CAIRO_DOCK_WIDGET_COLOR_SELECTOR_RGBA)
1912
gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (pOneWidget), TRUE);
1914
gtk_color_button_set_alpha (GTK_COLOR_BUTTON (pOneWidget), fValueList[3] * 65535);
1389
gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (pColorButton), FALSE);
1391
_pack_in_widget_box (pColorButton);
1392
g_signal_connect (G_OBJECT (pColorButton), "color-set", G_CALLBACK(_cairo_dock_set_color), pSubWidgetList);
1393
g_signal_connect (G_OBJECT (pColorButton), "clicked", G_CALLBACK(_cairo_dock_get_current_color), pSubWidgetList);
1916
gtk_color_button_set_alpha (GTK_COLOR_BUTTON (pOneWidget), 65535);
1919
gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (pOneWidget), FALSE);
1920
_pack_subwidget (pOneWidget);
1395
1921
bAddBackButton = TRUE,
1396
1922
g_free (fValueList);
1399
1925
case CAIRO_DOCK_WIDGET_VIEW_LIST : // liste des vues.
1400
1926
_add_combo_from_modele (s_pRendererListStore, TRUE, FALSE);
1414
1940
gchar *cShareThemesDir = NULL, *cUserThemesDir = NULL, *cDistantThemesDir = NULL;
1415
1941
if (pAuthorizedValuesList[0] != NULL)
1417
cShareThemesDir = (*pAuthorizedValuesList[0] != '\0' ? pAuthorizedValuesList[0] : NULL);
1943
cShareThemesDir = (*pAuthorizedValuesList[0] != '\0' ? cairo_dock_generate_file_path (pAuthorizedValuesList[0]) : NULL); // on autorise les ~/blabla.
1418
1944
if (pAuthorizedValuesList[1] != NULL)
1420
1946
cUserThemesDir = g_strdup_printf ("%s/%s/%s", g_cCairoDockDataDir, CAIRO_DOCK_EXTRAS_DIR, pAuthorizedValuesList[1]);
1421
1947
cDistantThemesDir = pAuthorizedValuesList[2];
1424
GHashTable *pThemeTable = cairo_dock_list_themes (cShareThemesDir, cUserThemesDir, cDistantThemesDir);
1950
cairo_dock_set_status_message_printf (pMainWindow, _("Listing themes in '%s' ..."), cDistantThemesDir);
1951
_allocate_new_buffer;
1952
data[0] = pOneWidget;
1953
data[1] = pMainWindow;
1954
data[2] = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, NULL);
1955
CairoDockTask *pTask = cairo_dock_list_themes_async (cShareThemesDir, cUserThemesDir, cDistantThemesDir, (GFunc) _got_themes_combo_list, data);
1956
g_object_set_data (G_OBJECT (pOneWidget), "cd-task", pTask);
1957
g_signal_connect (pMainWindow, "delete-event", G_CALLBACK (on_delete_async_widget), pOneWidget);
1958
g_object_ref (pOneWidget); // on prend une reference pour que le widget reste en vie lorsqu'on recharge la fenetre (sinon le widget serait detruit sans que la fenetre ne le soit, et lors de la destruction de celle-ci, le signal delete-event serait emis, et la callback appelee avec un widget deja detruit).
1425
1959
g_free (cUserThemesDir);
1427
cValue = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, NULL);
1428
cairo_dock_fill_combo_with_themes (pOneWidget, pThemeTable, cValue);
1429
g_hash_table_destroy (pThemeTable);
1960
g_free (cShareThemesDir);
1499
2057
cValue = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, NULL);
1500
2058
GtkTreeIter iter;
1501
if (_cairo_dock_find_iter_from_name (modele, cValue, &iter))
2059
if (_cairo_dock_find_iter_from_name (modele, cValue, &iter, FALSE))
1502
2060
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (pOneWidget), &iter);
1503
2061
g_free (cValue);
1505
2063
_pack_subwidget (pOneWidget);
2066
case CAIRO_DOCK_WIDGET_ICON_THEME_LIST :
2068
gchar *cUserPath = g_strdup_printf ("%s/.icons", g_getenv ("HOME"));
2069
const gchar *path[3];
2070
path[0] = (const gchar *)cUserPath;
2071
path[1] = "/usr/share/icons";
2074
if (s_pIconThemeListStore != NULL)
2076
gtk_list_store_clear (s_pIconThemeListStore);
2077
s_pIconThemeListStore = NULL;
2080
GHashTable *pHashTable = _cairo_dock_build_icon_themes_list (path);
2083
cairo_dock_build_icon_theme_list_for_gui (pHashTable);
2085
g_hash_table_destroy (pHashTable);
2086
_add_combo_from_modele (s_pIconThemeListStore, FALSE, FALSE);
2088
_pack_subwidget (pOneWidget);
2092
case CAIRO_DOCK_WIDGET_MODULE_LIST :
2094
//\______________ On remplit un modele avec les modules de la categorie.
2096
if (pAuthorizedValuesList && pAuthorizedValuesList[0] != NULL)
2097
iCategory = atoi (pAuthorizedValuesList[0]);
2098
modele = _allocate_new_model ();
2099
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (modele), CAIRO_DOCK_MODEL_NAME, GTK_SORT_ASCENDING);
2100
_allocate_new_buffer;
2101
data[0] = GINT_TO_POINTER (iCategory);
2103
cairo_dock_foreach_module ((GHRFunc) _add_module_to_modele, data);
2105
//\______________ On construit le treeview des modules.
2106
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (modele), CAIRO_DOCK_MODEL_NAME, GTK_SORT_ASCENDING);
2107
pOneWidget = gtk_tree_view_new ();
2108
gtk_tree_view_set_model (GTK_TREE_VIEW (pOneWidget), GTK_TREE_MODEL (modele));
2109
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (pOneWidget), TRUE);
2110
gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW (pOneWidget), TRUE);
2111
GtkTreeViewColumn* col;
2113
rend = gtk_cell_renderer_toggle_new ();
2114
col = gtk_tree_view_column_new_with_attributes (NULL, rend, "active", CAIRO_DOCK_MODEL_ACTIVE, NULL);
2115
gtk_tree_view_column_set_sort_column_id (col, CAIRO_DOCK_MODEL_ACTIVE);
2116
gtk_tree_view_append_column (GTK_TREE_VIEW (pOneWidget), col);
2117
g_signal_connect (G_OBJECT (rend), "toggled", (GCallback) _cairo_dock_activate_one_module, modele);
2119
rend = gtk_cell_renderer_pixbuf_new ();
2120
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (pOneWidget), -1, NULL, rend, "pixbuf", CAIRO_DOCK_MODEL_ICON, NULL);
2122
rend = gtk_cell_renderer_text_new ();
2123
col = gtk_tree_view_column_new_with_attributes (_("module"), rend, "text", CAIRO_DOCK_MODEL_NAME, NULL);
2124
gtk_tree_view_column_set_cell_data_func (col, rend, (GtkTreeCellDataFunc)_cairo_dock_render_module_name, NULL, NULL);
2125
gtk_tree_view_column_set_sort_column_id (col, CAIRO_DOCK_MODEL_NAME);
2126
gtk_tree_view_append_column (GTK_TREE_VIEW (pOneWidget), col);
2128
rend = gtk_cell_renderer_text_new ();
2129
col = gtk_tree_view_column_new_with_attributes (_("category"), rend, "text", CAIRO_DOCK_MODEL_STATE, NULL);
2130
gtk_tree_view_column_set_cell_data_func (col, rend, (GtkTreeCellDataFunc)_cairo_dock_render_category, NULL, NULL);
2131
gtk_tree_view_column_set_sort_column_id (col, CAIRO_DOCK_MODEL_STATE);
2132
gtk_tree_view_append_column (GTK_TREE_VIEW (pOneWidget), col);
2134
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (pOneWidget));
2135
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
2137
pScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
2138
gtk_widget_set (pScrolledWindow, "height-request", 2*CAIRO_DOCK_PREVIEW_HEIGHT, NULL);
2139
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (pScrolledWindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
2140
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (pScrolledWindow), pOneWidget);
2141
pSubWidgetList = g_slist_append (pSubWidgetList, pOneWidget);
2142
_pack_in_widget_box (pScrolledWindow);
2144
//\______________ On construit le widget de prevue et on le rajoute a la suite.
2145
pDescriptionLabel = gtk_label_new (NULL);
2146
g_signal_connect (pMainWindow, "delete-event", G_CALLBACK (on_delete_async_widget), pDescriptionLabel);
2147
g_object_ref (pDescriptionLabel);
2148
gtk_label_set_use_markup (GTK_LABEL (pDescriptionLabel), TRUE);
2149
gtk_widget_set (pDescriptionLabel,
2150
"width-request", CAIRO_DOCK_PREVIEW_WIDTH, NULL);
2151
gtk_label_set_justify (GTK_LABEL (pDescriptionLabel), GTK_JUSTIFY_LEFT);
2152
gtk_label_set_line_wrap (GTK_LABEL (pDescriptionLabel), TRUE);
2153
pPreviewImage = gtk_image_new_from_pixbuf (NULL);
2154
g_signal_connect (pMainWindow, "delete-event", G_CALLBACK (on_delete_async_widget), pPreviewImage);
2155
g_object_ref (pPreviewImage);
2156
gtk_widget_set (pPreviewImage,
2157
"height-request", CAIRO_DOCK_PREVIEW_HEIGHT,
2158
"width-request", CAIRO_DOCK_PREVIEW_WIDTH, NULL);
2159
_allocate_new_buffer;
2160
data[0] = pDescriptionLabel;
2161
data[1] = pPreviewImage;
2162
gtk_tree_selection_set_select_function (selection,
2163
(GtkTreeSelectionFunc) _cairo_dock_select_one_item_in_tree,
2166
pPreviewBox = gtk_vbox_new (FALSE, CAIRO_DOCK_GUI_MARGIN);
2167
gtk_box_pack_start (GTK_BOX (pPreviewBox), pPreviewImage, FALSE, FALSE, 0);
2168
gtk_box_pack_start (GTK_BOX (pPreviewBox), pDescriptionLabel, FALSE, FALSE, 0);
2169
_pack_in_widget_box (pPreviewBox);
2171
//\______________ On affiche un message par defaut.
2172
gchar *cDefaultMessage = g_strdup_printf ("<b><span font_desc=\"Sans 14\">%s</span></b>", _("Click on an applet in order to have a preview and a description of it."));
2173
gtk_label_set_markup (GTK_LABEL (pDescriptionLabel), cDefaultMessage);
2174
g_free (cDefaultMessage);
2175
_set_preview_image (CAIRO_DOCK_SHARE_DATA_DIR"/"CAIRO_DOCK_LOGO, GTK_IMAGE (pPreviewImage));
1508
2179
case CAIRO_DOCK_WIDGET_JUMP_TO_MODULE : // bouton raccourci vers un autre module
1509
2180
case CAIRO_DOCK_WIDGET_JUMP_TO_MODULE_IF_EXISTS : // idem mais seulement affiche si le module existe.
1510
2181
if (pAuthorizedValuesList == NULL || pAuthorizedValuesList[0] == NULL || *pAuthorizedValuesList[0] == '\0')
1561
2243
if (pAuthorizedValuesList != NULL)
1564
int iSelectedItem = -1;
1565
if (iElementType == CAIRO_DOCK_WIDGET_NUMBERED_LIST)
2246
int iSelectedItem = -1, iOrder1, iOrder2;
2247
gboolean bNumberedList = (iElementType == CAIRO_DOCK_WIDGET_NUMBERED_LIST || iElementType == CAIRO_DOCK_WIDGET_NUMBERED_CONTROL_LIST || iElementType == CAIRO_DOCK_WIDGET_NUMBERED_CONTROL_LIST_SELECTIVE);
1566
2249
iSelectedItem = atoi (cValue);
1567
gchar *cResult = (iElementType == CAIRO_DOCK_WIDGET_NUMBERED_LIST ? g_new0 (gchar , 10) : NULL);
1568
for (k = 0; pAuthorizedValuesList[k] != NULL; k ++) // on ajoute toutes les chaines possibles a la combo.
2250
gchar *cResult = (bNumberedList ? g_new0 (gchar , 10) : NULL);
2251
int dk = (iElementType == CAIRO_DOCK_WIDGET_NUMBERED_CONTROL_LIST_SELECTIVE ? 3 : 1);
2252
iNbControlledWidgets = 0;
2253
for (k = 0; pAuthorizedValuesList[k] != NULL; k += dk) // on ajoute toutes les chaines possibles a la combo.
1570
2255
GtkTreeIter iter;
1571
2256
gtk_list_store_append (GTK_LIST_STORE (modele), &iter);
1572
2257
if (iSelectedItem == -1 && cValue && strcmp (cValue, pAuthorizedValuesList[k]) == 0)
2258
iSelectedItem = k/dk;
1575
2260
if (cResult != NULL)
1576
snprintf (cResult, 9, "%d", k);
2261
snprintf (cResult, 9, "%d", k/dk);
2263
if (iElementType == CAIRO_DOCK_WIDGET_NUMBERED_CONTROL_LIST_SELECTIVE)
2265
iOrder1 = atoi (pAuthorizedValuesList[k+1]);
2266
iOrder2 = atoi (pAuthorizedValuesList[k+2]);
2267
iNbControlledWidgets = MAX (iNbControlledWidgets, iOrder1 + iOrder2 - 1);
2268
//g_print ("iSelectedItem:%d ; k/dk:%d\n", iSelectedItem , k/dk);
2269
if (iSelectedItem == k/dk)
2271
iFirstSensitiveWidget = iOrder1;
2272
iNbSensitiveWidgets = iOrder2;
2277
iOrder1 = iOrder2 = k;
1577
2279
gtk_list_store_set (GTK_LIST_STORE (modele), &iter,
1578
CAIRO_DOCK_MODEL_NAME, (iElementType == 'l' ? dgettext (cGettextDomain, pAuthorizedValuesList[k]) : pAuthorizedValuesList[k]),
1579
CAIRO_DOCK_MODEL_RESULT, (cResult != NULL ? cResult : pAuthorizedValuesList[k]), -1);
2280
CAIRO_DOCK_MODEL_NAME, (bNumberedList ? dgettext (cGettextDomain, pAuthorizedValuesList[k]) : pAuthorizedValuesList[k]),
2281
CAIRO_DOCK_MODEL_RESULT, (cResult != NULL ? cResult : pAuthorizedValuesList[k]),
2282
CAIRO_DOCK_MODEL_ORDER, iOrder1,
2283
CAIRO_DOCK_MODEL_ORDER2, iOrder2, -1);
1582
2285
g_free (cResult);