From 82c99d625bf2d763adf0b812dd59b92a4aaa4735 Mon Sep 17 00:00:00 2001 From: Ettore Perazzoli Date: Mon, 8 Jul 2002 20:45:49 +0000 Subject: Change the group icon size using e_shortcuts_set_group_uses_small_icons() * e-shortcuts-view.c (toggle_large_icons_cb): Change the group icon size using e_shortcuts_set_group_uses_small_icons() instead of changing it on the widget directly. (toggle_small_icons_cb): Likewise. (group_change_icon_size_callback): New, callback for the "group_change_icon_size" signal on the EShortcuts object. (e_shortcuts_view_construct): Connect. Also, initialize the icon sizes in the icon bars from the EShortcuts object. * e-shell-view.c (e_shell_view_load_settings): Don't set the shortcut group icon modes here anymore. * e-shortcuts.c: New member use_small_icons in struct ShortcutGroup. (shortcut_group_new): Init to FALSE. (e_shortcuts_set_group_uses_small_icons): New. (e_shortcuts_get_group_uses_small_icons): New. (class_init): Install "group_change_icon_size" signal. (save_shortcuts): Save the icon size per-group here, i.e. . (load_shortcuts): Set the icon size from the group's definition here. * e-shortcuts.h: New signal "group_change_icon_size" in EShortcutsClass. svn path=/trunk/; revision=17386 --- shell/e-shortcuts.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 2 deletions(-) (limited to 'shell/e-shortcuts.c') diff --git a/shell/e-shortcuts.c b/shell/e-shortcuts.c index fffedfbaf3..e253764571 100644 --- a/shell/e-shortcuts.c +++ b/shell/e-shortcuts.c @@ -76,6 +76,9 @@ struct _ShortcutGroup { /* A list of shortcuts. */ GSList *shortcuts; + + /* Whether to use small icons for this group. */ + unsigned int use_small_icons : 1; }; typedef struct _ShortcutGroup ShortcutGroup; @@ -111,6 +114,7 @@ enum { NEW_GROUP, REMOVE_GROUP, RENAME_GROUP, + GROUP_CHANGE_ICON_SIZE, NEW_SHORTCUT, REMOVE_SHORTCUT, UPDATE_SHORTCUT, @@ -200,8 +204,9 @@ shortcut_group_new (const char *title) ShortcutGroup *new; new = g_new (ShortcutGroup, 1); - new->title = g_strdup (title); - new->shortcuts = NULL; + new->title = g_strdup (title); + new->shortcuts = NULL; + new->use_small_icons = FALSE; return new; } @@ -307,6 +312,7 @@ load_shortcuts (EShortcuts *shortcuts, for (p = root->childs; p != NULL; p = p->next) { ShortcutGroup *shortcut_group; xmlChar *shortcut_group_title; + xmlChar *icon_size; if (strcmp ((char *) p->name, "group") != 0) continue; @@ -318,6 +324,13 @@ load_shortcuts (EShortcuts *shortcuts, shortcut_group = shortcut_group_new (shortcut_group_title); xmlFree (shortcut_group_title); + icon_size = xmlGetProp (p, "icon_size"); + if (icon_size != NULL && strcmp (icon_size, "small") == 0) + shortcut_group->use_small_icons = TRUE; + else + shortcut_group->use_small_icons = FALSE; + xmlFree (icon_size); + for (q = p->childs; q != NULL; q = q->next) { EShortcutItem *shortcut_item; xmlChar *uri; @@ -399,6 +412,11 @@ save_shortcuts (EShortcuts *shortcuts, xmlSetProp (group_node, (xmlChar *) "title", group->title); + if (group->use_small_icons) + xmlSetProp (group_node, (xmlChar *) "icon_size", "small"); + else + xmlSetProp (group_node, (xmlChar *) "icon_size", "large"); + for (q = group->shortcuts; q != NULL; q = q->next) { EShortcutItem *shortcut; xmlNode *shortcut_node; @@ -663,6 +681,16 @@ class_init (EShortcutsClass *klass) GTK_TYPE_INT, GTK_TYPE_STRING); + signals[GROUP_CHANGE_ICON_SIZE] + = gtk_signal_new ("group_change_icon_size", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (EShortcutsClass, group_change_icon_size), + gtk_marshal_NONE__INT_INT, + GTK_TYPE_NONE, 2, + GTK_TYPE_INT, + GTK_TYPE_INT); + signals[NEW_SHORTCUT] = gtk_signal_new ("new_shortcut", GTK_RUN_FIRST, @@ -1147,5 +1175,54 @@ e_shortcuts_get_group_title (EShortcuts *shortcuts, return group->title; } +void +e_shortcuts_set_group_uses_small_icons (EShortcuts *shortcuts, + int group_num, + gboolean use_small_icons) +{ + EShortcutsPrivate *priv; + ShortcutGroup *group; + GSList *group_element; + + g_return_if_fail (E_IS_SHORTCUTS (shortcuts)); + + priv = shortcuts->priv; + + group_element = g_slist_nth (priv->groups, group_num); + if (group_element == NULL) + return; + + group = (ShortcutGroup *) group_element->data; + + use_small_icons = !! use_small_icons; + if (group->use_small_icons != use_small_icons) { + group->use_small_icons = use_small_icons; + gtk_signal_emit (GTK_OBJECT (shortcuts), signals[GROUP_CHANGE_ICON_SIZE], + group_num, use_small_icons); + + make_dirty (shortcuts); + } +} + +gboolean +e_shortcuts_get_group_uses_small_icons (EShortcuts *shortcuts, + int group_num) +{ + EShortcutsPrivate *priv; + ShortcutGroup *group; + GSList *group_element; + + g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), FALSE); + + priv = shortcuts->priv; + + group_element = g_slist_nth (priv->groups, group_num); + if (group_element == NULL) + return FALSE; + + group = (ShortcutGroup *) group_element->data; + return group->use_small_icons; +} + E_MAKE_TYPE (e_shortcuts, "EShortcuts", EShortcuts, class_init, init, PARENT_TYPE) -- cgit v1.2.3