From 88f0701b10f70b8aede0f7e23014875ab72c2e26 Mon Sep 17 00:00:00 2001 From: Jaap Haitsma Date: Sun, 1 Jul 2007 14:45:24 +0000 Subject: [PATCH] new script to keep in sync with toolbareditor in libegg 2007-07-01 Jaap Haitsma * cut-n-paste/toolbar-editor/update-toolbareditor-from-libegg: new script to keep in sync with toolbareditor in libegg * cut-n-paste/toolbar-editor/*: Run update-toolbareditor-from-libegg so we are in sync again. Fixes bug #452850. svn path=/trunk/; revision=2533 --- ChangeLog | 12 ++++ .../toolbar-editor/egg-editable-toolbar.c | 63 +++++++++++++++- .../toolbar-editor/egg-toolbar-editor.c | 72 ++++++++++++++----- .../toolbar-editor/egg-toolbars-model.c | 2 +- cut-n-paste/toolbar-editor/eggtreemultidnd.c | 2 +- .../update-toolbareditor-from-libegg | 21 ++++++ 6 files changed, 151 insertions(+), 21 deletions(-) create mode 100755 cut-n-paste/toolbar-editor/update-toolbareditor-from-libegg diff --git a/ChangeLog b/ChangeLog index d75c200d..a2a2010e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-07-01 Jaap Haitsma + + * cut-n-paste/toolbar-editor/update-toolbareditor-from-libegg: + + new script to keep in sync with toolbareditor in libegg + + * cut-n-paste/toolbar-editor/*: + + Run update-toolbareditor-from-libegg so we are in sync again. + Fixes bug #452850. + + 2007-07-01 Carlos Garcia Campos * shell/ev-sidebar-links.c: (job_finished_callback): diff --git a/cut-n-paste/toolbar-editor/egg-editable-toolbar.c b/cut-n-paste/toolbar-editor/egg-editable-toolbar.c index 8698ba6a..2b26b4ea 100644 --- a/cut-n-paste/toolbar-editor/egg-editable-toolbar.c +++ b/cut-n-paste/toolbar-editor/egg-editable-toolbar.c @@ -44,11 +44,13 @@ #include #include #include +#include #include #include static void egg_editable_toolbar_class_init (EggEditableToolbarClass *klass); static void egg_editable_toolbar_init (EggEditableToolbar *etoolbar); +static GdkPixbuf * new_separator_pixbuf (void); #define MIN_TOOLBAR_HEIGHT 20 #define EGG_ITEM_NAME "egg-item-name" @@ -109,7 +111,7 @@ egg_editable_toolbar_get_type (void) if (G_UNLIKELY (type == 0)) { - const GTypeInfo our_info = { + static const GTypeInfo our_info = { sizeof (EggEditableToolbarClass), NULL, /* base_init */ NULL, /* base_finalize */ @@ -461,6 +463,7 @@ configure_item_cursor (GtkToolItem *item, if (priv->edit_mode > 0) { GdkCursor *cursor; + GdkPixbuf *pixbuf = NULL; cursor = gdk_cursor_new (GDK_HAND2); gdk_window_set_cursor (widget->window, cursor); @@ -468,6 +471,64 @@ configure_item_cursor (GtkToolItem *item, gtk_drag_source_set (widget, GDK_BUTTON1_MASK, dest_drag_types, G_N_ELEMENTS (dest_drag_types), GDK_ACTION_MOVE); + if (GTK_IS_SEPARATOR_TOOL_ITEM (item)) + { + pixbuf = new_separator_pixbuf (); + } + else + { + char *icon_name=NULL; + char *stock_id=NULL; + GtkAction *action; + char *name; + + name = g_object_get_data (G_OBJECT (widget), EGG_ITEM_NAME); + action = name ? find_action (etoolbar, name) : NULL; + + if (action) + { + g_object_get (action, + "icon-name", &icon_name, + "stock-id", &stock_id, + NULL); + } + if (icon_name) + { + GdkScreen *screen; + GtkIconTheme *icon_theme; + GtkSettings *settings; + gint width, height; + + screen = gtk_widget_get_screen (widget); + icon_theme = gtk_icon_theme_get_for_screen (screen); + settings = gtk_settings_get_for_screen (screen); + + if (!gtk_icon_size_lookup_for_settings (settings, + GTK_ICON_SIZE_LARGE_TOOLBAR, + &width, &height)) + { + width = height = 24; + } + + pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name, + MIN (width, height), 0, NULL); + } + else if (stock_id) + { + pixbuf = gtk_widget_render_icon (widget, stock_id, + GTK_ICON_SIZE_LARGE_TOOLBAR, NULL); + } + g_free (icon_name); + g_free (stock_id); + } + + if (G_UNLIKELY (!pixbuf)) + { + return; + } + gtk_drag_source_set_icon_pixbuf (widget, pixbuf); + g_object_unref (pixbuf); + } else { diff --git a/cut-n-paste/toolbar-editor/egg-toolbar-editor.c b/cut-n-paste/toolbar-editor/egg-toolbar-editor.c index ba5973cb..fdf6e3f0 100644 --- a/cut-n-paste/toolbar-editor/egg-toolbar-editor.c +++ b/cut-n-paste/toolbar-editor/egg-toolbar-editor.c @@ -78,7 +78,7 @@ egg_toolbar_editor_get_type (void) if (G_UNLIKELY (type == 0)) { - const GTypeInfo our_info = { + static const GTypeInfo our_info = { sizeof (EggToolbarEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ @@ -362,12 +362,43 @@ event_box_realize_cb (GtkWidget *widget, GtkImage *icon) { gchar *stock_id; GdkPixbuf *pixbuf; + gtk_image_get_stock (icon, &stock_id, NULL); pixbuf = gtk_widget_render_icon (widget, stock_id, GTK_ICON_SIZE_LARGE_TOOLBAR, NULL); gtk_drag_source_set_icon_pixbuf (widget, pixbuf); g_object_unref (pixbuf); } + else if (type == GTK_IMAGE_ICON_NAME) + { + const gchar *icon_name; + GdkScreen *screen; + GtkIconTheme *icon_theme; + GtkSettings *settings; + gint width, height; + GdkPixbuf *pixbuf; + + gtk_image_get_icon_name (icon, &icon_name, NULL); + screen = gtk_widget_get_screen (widget); + icon_theme = gtk_icon_theme_get_for_screen (screen); + settings = gtk_settings_get_for_screen (screen); + + if (!gtk_icon_size_lookup_for_settings (settings, + GTK_ICON_SIZE_LARGE_TOOLBAR, + &width, &height)) + { + width = height = 24; + } + + pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name, + MIN (width, height), 0, NULL); + if (G_UNLIKELY (!pixbuf)) + return; + + gtk_drag_source_set_icon_pixbuf (widget, pixbuf); + g_object_unref (pixbuf); + + } else if (type == GTK_IMAGE_PIXBUF) { GdkPixbuf *pixbuf = gtk_image_get_pixbuf (icon); @@ -427,8 +458,7 @@ editor_create_item_from_name (EggToolbarEditor *editor, { GtkWidget *item; const char *item_name; - const char *stock_id; - const char *short_label; + char *short_label; const char *collate_key; if (strcmp (name, "_separator") == 0) @@ -437,36 +467,42 @@ editor_create_item_from_name (EggToolbarEditor *editor, icon = _egg_editable_toolbar_new_separator_image (); short_label = _("Separator"); - item_name = strdup (name); + item_name = g_strdup (name); collate_key = g_utf8_collate_key (short_label, -1); item = editor_create_item (editor, GTK_IMAGE (icon), short_label, drag_action); } else { - GValue value = { 0, }; GtkAction *action; GtkWidget *icon; + char *stock_id, *icon_name = NULL; action = find_action (editor, name); g_return_val_if_fail (action != NULL, NULL); - g_value_init (&value, G_TYPE_STRING); - g_object_get_property (G_OBJECT (action), "stock_id", &value); - stock_id = g_value_get_string (&value); - icon = gtk_image_new_from_stock (stock_id ? stock_id : GTK_STOCK_DND, - GTK_ICON_SIZE_LARGE_TOOLBAR); - g_value_unset (&value); - - g_value_init (&value, G_TYPE_STRING); - g_object_get_property (G_OBJECT (action), "short_label", &value); - short_label = g_value_get_string (&value); + g_object_get (action, + "icon-name", &icon_name, + "stock-id", &stock_id, + "short-label", &short_label, + NULL); + + /* This is a workaround to catch named icons. */ + if (icon_name) + icon = gtk_image_new_from_icon_name (icon_name, + GTK_ICON_SIZE_LARGE_TOOLBAR); + else + icon = gtk_image_new_from_stock (stock_id ? stock_id : GTK_STOCK_DND, + GTK_ICON_SIZE_LARGE_TOOLBAR); - item_name = strdup (name); + item_name = g_strdup (name); collate_key = g_utf8_collate_key (short_label, -1); item = editor_create_item (editor, GTK_IMAGE (icon), short_label, drag_action); - g_value_unset (&value); + + g_free (short_label); + g_free (stock_id); + g_free (icon_name); } g_object_set_data_full (G_OBJECT (item), "egg-collate-key", @@ -602,7 +638,7 @@ setup_editor (EggToolbarEditor *editor) editor->priv->scrolled_window = scrolled_window; gtk_widget_show (scrolled_window); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (editor), scrolled_window, TRUE, TRUE, 0); } diff --git a/cut-n-paste/toolbar-editor/egg-toolbars-model.c b/cut-n-paste/toolbar-editor/egg-toolbars-model.c index 2cd58ac6..f0a5b0fa 100644 --- a/cut-n-paste/toolbar-editor/egg-toolbars-model.c +++ b/cut-n-paste/toolbar-editor/egg-toolbars-model.c @@ -75,7 +75,7 @@ egg_toolbars_model_get_type (void) if (G_UNLIKELY (type == 0)) { - const GTypeInfo our_info = { + static const GTypeInfo our_info = { sizeof (EggToolbarsModelClass), NULL, /* base_init */ NULL, /* base_finalize */ diff --git a/cut-n-paste/toolbar-editor/eggtreemultidnd.c b/cut-n-paste/toolbar-editor/eggtreemultidnd.c index 4850c686..3a7da919 100644 --- a/cut-n-paste/toolbar-editor/eggtreemultidnd.c +++ b/cut-n-paste/toolbar-editor/eggtreemultidnd.c @@ -59,7 +59,7 @@ egg_tree_multi_drag_source_get_type (void) if (!our_type) { - const GTypeInfo our_info = + static const GTypeInfo our_info = { sizeof (EggTreeMultiDragSourceIface), /* class_size */ NULL, /* base_init */ diff --git a/cut-n-paste/toolbar-editor/update-toolbareditor-from-libegg b/cut-n-paste/toolbar-editor/update-toolbareditor-from-libegg new file mode 100755 index 00000000..fe56a2fc --- /dev/null +++ b/cut-n-paste/toolbar-editor/update-toolbareditor-from-libegg @@ -0,0 +1,21 @@ +#!/bin/sh +# Get latest toolbar editor from libegg +# Developers using the toolbar editor in their projects can use this script to +# fetch the latest toolbar editor from libegg +echo "Obtaining latest version of toolbar editor from libegg" + +FILES="egg-editable-toolbar.c \ + egg-toolbars-model.c \ + egg-toolbar-editor.c \ + eggtreemultidnd.c \ + egg-editable-toolbar.h \ + egg-toolbars-model.h \ + egg-toolbar-editor.h \ + eggtreemultidnd.h \ + eggmarshalers.list" + +for FILE in $FILES +do + svn export http://svn.gnome.org/svn/libegg/trunk/libegg/toolbareditor/$FILE +done + -- 2.43.5