aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/shortcut-bar/e-shortcut-bar.c
diff options
context:
space:
mode:
authorEttore Perazzoli <ettore@src.gnome.org>2000-09-26 03:09:13 +0800
committerEttore Perazzoli <ettore@src.gnome.org>2000-09-26 03:09:13 +0800
commit72fff3213ae1221b3c13841cb43df39f963efb1f (patch)
tree64eb4573818abe83859ca414fb86fa60b822c377 /widgets/shortcut-bar/e-shortcut-bar.c
parent1084ed7340617c3476cf33694256dd06f07d86ec (diff)
downloadgsoc2013-evolution-72fff3213ae1221b3c13841cb43df39f963efb1f.tar
gsoc2013-evolution-72fff3213ae1221b3c13841cb43df39f963efb1f.tar.gz
gsoc2013-evolution-72fff3213ae1221b3c13841cb43df39f963efb1f.tar.bz2
gsoc2013-evolution-72fff3213ae1221b3c13841cb43df39f963efb1f.tar.lz
gsoc2013-evolution-72fff3213ae1221b3c13841cb43df39f963efb1f.tar.xz
gsoc2013-evolution-72fff3213ae1221b3c13841cb43df39f963efb1f.tar.zst
gsoc2013-evolution-72fff3213ae1221b3c13841cb43df39f963efb1f.zip
Make the shortcut bar not alter the model by itself on a drag and drop
operation; instead, just emit some newly created dnd signals. The code using the library will then dispatch this to the appropriate data structures. Also, disconnect the model signals on ::destroy. svn path=/trunk/; revision=5574
Diffstat (limited to 'widgets/shortcut-bar/e-shortcut-bar.c')
-rw-r--r--widgets/shortcut-bar/e-shortcut-bar.c51
1 files changed, 46 insertions, 5 deletions
diff --git a/widgets/shortcut-bar/e-shortcut-bar.c b/widgets/shortcut-bar/e-shortcut-bar.c
index 2826f612d5..0a29ef3729 100644
--- a/widgets/shortcut-bar/e-shortcut-bar.c
+++ b/widgets/shortcut-bar/e-shortcut-bar.c
@@ -134,6 +134,8 @@ static GdkPixbuf* e_shortcut_bar_load_image (const gchar *filename);
enum
{
ITEM_SELECTED,
+ SHORTCUT_DROPPED,
+ SHORTCUT_DRAGGED,
LAST_SIGNAL
};
@@ -141,6 +143,21 @@ static guint e_shortcut_bar_signals[LAST_SIGNAL] = {0};
static EGroupBarClass *parent_class;
+static void
+e_shortcut_bar_marshal_NONE__INT_INT_STRING_STRING (GtkObject *object,
+ GtkSignalFunc func,
+ gpointer func_data,
+ GtkArg *args)
+{
+ void (*rfunc) (GtkObject *, gint, gint, gchar *, gchar *, gpointer) = func;
+
+ (*rfunc) (object,
+ GTK_VALUE_INT (args[0]),
+ GTK_VALUE_INT (args[1]),
+ GTK_VALUE_STRING (args[2]),
+ GTK_VALUE_STRING (args[3]),
+ func_data);
+}
E_MAKE_TYPE(e_shortcut_bar, "EShortcutBar", EShortcutBar,
e_shortcut_bar_class_init, e_shortcut_bar_init,
@@ -163,11 +180,33 @@ e_shortcut_bar_class_init (EShortcutBarClass *class)
GTK_RUN_LAST | GTK_RUN_ACTION,
object_class->type,
GTK_SIGNAL_OFFSET (EShortcutBarClass,
- selected_item),
+ item_selected),
gtk_marshal_NONE__POINTER_INT_INT,
GTK_TYPE_NONE, 3, GTK_TYPE_GDK_EVENT,
GTK_TYPE_INT, GTK_TYPE_INT);
+ e_shortcut_bar_signals[SHORTCUT_DROPPED] =
+ gtk_signal_new ("shortcut_dropped",
+ GTK_RUN_LAST | GTK_RUN_ACTION,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EShortcutBarClass, shortcut_dropped),
+ e_shortcut_bar_marshal_NONE__INT_INT_STRING_STRING,
+ GTK_TYPE_NONE, 4,
+ GTK_TYPE_INT,
+ GTK_TYPE_INT,
+ GTK_TYPE_STRING,
+ GTK_TYPE_STRING);
+
+ e_shortcut_bar_signals[SHORTCUT_DRAGGED] =
+ gtk_signal_new ("shortcut_dragged",
+ GTK_RUN_LAST | GTK_RUN_ACTION,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EShortcutBarClass, shortcut_dragged),
+ gtk_marshal_NONE__INT_INT,
+ GTK_TYPE_NONE, 2,
+ GTK_TYPE_INT,
+ GTK_TYPE_INT);
+
gtk_object_class_add_signals (object_class, e_shortcut_bar_signals,
LAST_SIGNAL);
@@ -207,6 +246,8 @@ e_shortcut_bar_destroy (GtkObject *object)
g_array_free (shortcut_bar->groups, TRUE);
+ e_shortcut_bar_disconnect_model (shortcut_bar);
+
g_free (shortcut_bar->dragged_url);
g_free (shortcut_bar->dragged_name);
@@ -623,8 +664,9 @@ e_shortcut_bar_on_drag_data_received (GtkWidget *widget,
group_num = e_group_bar_get_group_num (E_GROUP_BAR (shortcut_bar),
GTK_WIDGET (icon_bar)->parent);
- e_shortcut_model_add_item (shortcut_bar->model, group_num,
- position, item_url, item_name);
+ gtk_signal_emit (GTK_OBJECT (shortcut_bar),
+ e_shortcut_bar_signals[SHORTCUT_DROPPED],
+ group_num, position, item_url, item_name);
gtk_drag_finish (context, TRUE, TRUE, time);
return;
@@ -647,8 +689,7 @@ e_shortcut_bar_on_drag_data_delete (GtkWidget *widget,
group_num = e_group_bar_get_group_num (E_GROUP_BAR (shortcut_bar),
widget->parent);
- e_shortcut_model_remove_item (shortcut_bar->model, group_num,
- icon_bar->dragged_item_num);
+ gtk_signal_emit (GTK_OBJECT (shortcut_bar), group_num, icon_bar->dragged_item_num);
}