diff options
author | Christopher James Lahey <clahey@ximian.com> | 2002-04-23 05:46:59 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2002-04-23 05:46:59 +0800 |
commit | acf4bad9d022d9d4c69e7d05877194157f3fd31c (patch) | |
tree | 80714dfa3acf377d55744a8d09644f937b7b3edd /widgets/menus/gal-view-instance.c | |
parent | fe26a0fee38b095d62a68783ea4d1b01b04e22db (diff) | |
download | gsoc2013-evolution-acf4bad9d022d9d4c69e7d05877194157f3fd31c.tar.gz gsoc2013-evolution-acf4bad9d022d9d4c69e7d05877194157f3fd31c.tar.zst gsoc2013-evolution-acf4bad9d022d9d4c69e7d05877194157f3fd31c.zip |
Bumped version number to 0.19.99.14.
2002-04-22 Christopher James Lahey <clahey@ximian.com>
* configure.in: Bumped version number to 0.19.99.14.
* gal/widgets/e-popup-menu.c, gal/widgets/e-popup-menu.h
(e_popup_menu_copy_1, e_popup_menu_free_1, e_popup_menu_copy,
e_popup_menu_free): Added these functions
From gal/e-table/ChangeLog:
2002-04-22 Christopher James Lahey <clahey@ximian.com>
* e-table-memory-store.c, e-table-memory-store.h: Renamed the
insert functions in this class to make a bit more sense.
From gal/menus/ChangeLog:
2002-04-22 Christopher James Lahey <clahey@ximian.com>
* gal-view-instance.c, gal-view-instance.h
(gal_view_instance_get_popup_menu,
gal_view_instance_free_popup_menu): Added these functions. Used
to add a current view menu to your popup menus.
From gal/shortcut-bar/ChangeLog:
2002-04-22 Christopher James Lahey <clahey@ximian.com>
* e-icon-bar.c (e_icon_bar_drag_motion): Removed an unused
variable.
svn path=/trunk/; revision=16559
Diffstat (limited to 'widgets/menus/gal-view-instance.c')
-rw-r--r-- | widgets/menus/gal-view-instance.c | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/widgets/menus/gal-view-instance.c b/widgets/menus/gal-view-instance.c index 26e1f5546d..1cc0389f47 100644 --- a/widgets/menus/gal-view-instance.c +++ b/widgets/menus/gal-view-instance.c @@ -36,8 +36,10 @@ #include <gal/widgets/e-unicode.h> #include "gal-view-instance.h" #include "gal-view-instance-save-as-dialog.h" +#include "gal-define-views-dialog.h" #include <sys/stat.h> #include <unistd.h> +#include <gtk/gtkcheckmenuitem.h> #define GVI_CLASS(e) ((GalViewInstanceClass *)((GtkObject *)e)->klass) @@ -45,6 +47,10 @@ static GtkObjectClass *gal_view_instance_parent_class; +static const EPopupMenu separator = E_POPUP_SEPARATOR; +static const EPopupMenu terminator = E_POPUP_TERMINATOR; + + #define d(x) x enum { @@ -479,3 +485,136 @@ gal_view_instance_exists (GalViewInstance *instance) return FALSE; } + +typedef struct { + GalViewInstance *instance; + char *id; +} ListenerClosure; + +static void +view_item_cb (GtkWidget *widget, + gpointer user_data) +{ + ListenerClosure *closure = user_data; + + if (GTK_CHECK_MENU_ITEM (widget)->active) { + gal_view_instance_set_current_view_id (closure->instance, closure->id); + } +} + +static void +add_popup_radio_item (EPopupMenu *menu_item, + gchar *title, + void (*fn) (GtkWidget *widget, gpointer closure), + gpointer closure, + gboolean value) +{ + const EPopupMenu menu_item_struct = + E_POPUP_RADIO_ITEM_CC (title, + fn, + closure, + 0, + value); + + e_popup_menu_copy_1 (menu_item, &menu_item_struct); +} + +static void +add_popup_menu_item (EPopupMenu *menu_item, + gchar *title, + void (*fn) (GtkWidget *widget, gpointer closure), + gpointer closure) +{ + const EPopupMenu menu_item_struct = + E_POPUP_ITEM_CC (title, + fn, + closure, + 0); + + e_popup_menu_copy_1 (menu_item, &menu_item_struct); +} + +static void +define_views_dialog_clicked(GtkWidget *dialog, int button, GalViewInstance *instance) +{ + if (button == 0) { + gal_view_collection_save(instance->collection); + } + gnome_dialog_close(GNOME_DIALOG(dialog)); +} + +static void +define_views_cb(GtkWidget *widget, + GalViewInstance *instance) +{ + GtkWidget *dialog = gal_define_views_dialog_new(instance->collection); + gtk_signal_connect(GTK_OBJECT(dialog), "clicked", + GTK_SIGNAL_FUNC(define_views_dialog_clicked), instance); + gtk_widget_show(dialog); +} + +static void +save_current_view_cb(GtkWidget *widget, + GalViewInstance *instance) +{ + gal_view_instance_save_as (instance); +} + +EPopupMenu * +gal_view_instance_get_popup_menu (GalViewInstance *instance) +{ + EPopupMenu *ret_val; + int length; + int i; + gboolean found = FALSE; + char *id; + + length = gal_view_collection_get_count(instance->collection); + id = gal_view_instance_get_current_view_id (instance); + + ret_val = g_new (EPopupMenu, length + 6); + + for (i = 0; i < length; i++) { + gboolean value = FALSE; + GalViewCollectionItem *item = gal_view_collection_get_view_item(instance->collection, i); + ListenerClosure *closure; + + closure = g_new (ListenerClosure, 1); + closure->instance = instance; + closure->id = item->id; + gtk_object_ref (GTK_OBJECT(closure->instance)); + + if (!found && id && !strcmp (id, item->id)) { + found = TRUE; + value = TRUE; + } + + add_popup_radio_item (ret_val + i, item->title, GTK_SIGNAL_FUNC (view_item_cb), closure, value); + } + + if (!found) { + e_popup_menu_copy_1 (ret_val + i++, &separator); + + add_popup_radio_item (ret_val + i++, N_("Custom View"), NULL, NULL, TRUE); + add_popup_menu_item (ret_val + i++, N_("Save Custom View"), GTK_SIGNAL_FUNC (save_current_view_cb), instance); + } + + e_popup_menu_copy_1 (ret_val + i++, &separator); + add_popup_menu_item (ret_val + i++, N_("Define Views"), GTK_SIGNAL_FUNC (define_views_cb), instance); + e_popup_menu_copy_1 (ret_val + i++, &terminator); + + return ret_val; +} + +void +gal_view_instance_free_popup_menu (GalViewInstance *instance, EPopupMenu *menu) +{ + int i; + /* This depends on the first non-custom closure to be a separator or a terminator. */ + for (i = 0; menu[i].name && *(menu[i].name); i++) { + gtk_object_unref (GTK_OBJECT ( ((ListenerClosure *)(menu[i].closure))->instance)); + g_free (menu[i].closure); + } + + e_popup_menu_free (menu); +} |