[gnome-calendar/calendar-management] source-manager: show the edit popover with right-click
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/calendar-management] source-manager: show the edit popover with right-click
- Date: Thu, 5 Feb 2015 13:02:34 +0000 (UTC)
commit 3220b2fc3777d73b4376f1b4d8885f2c86fc4a90
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Feb 5 11:02:24 2015 -0200
source-manager: show the edit popover with right-click
data/ui/source-manager-dialog.ui | 1 +
src/gcal-source-manager-dialog.c | 79 +++++++++++++++++++++++++++++++++++++-
2 files changed, 78 insertions(+), 2 deletions(-)
---
diff --git a/data/ui/source-manager-dialog.ui b/data/ui/source-manager-dialog.ui
index 8f863a1..54c3bf5 100644
--- a/data/ui/source-manager-dialog.ui
+++ b/data/ui/source-manager-dialog.ui
@@ -59,6 +59,7 @@
<property name="selection_mode">none</property>
<property name="activate_on_single_click">True</property>
<signal name="row_activated" handler="row_activated_cb"
object="GcalSourceManagerDialog" swapped="no"/>
+ <signal name="button_release_event" handler="button_release_cb"
object="GcalSourceManagerDialog" swapped="no"/>
</object>
</child>
</object>
diff --git a/src/gcal-source-manager-dialog.c b/src/gcal-source-manager-dialog.c
index e6ea5c7..38bee02 100644
--- a/src/gcal-source-manager-dialog.c
+++ b/src/gcal-source-manager-dialog.c
@@ -61,6 +61,10 @@ enum {
};
/* callbacks */
+static gboolean button_release_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer user_data);
+
static void color_action_activated (GSimpleAction *menu_item,
GVariant *value,
gpointer user_data);
@@ -117,6 +121,13 @@ static GtkWidget* make_row_for_source (GcalSourceManagerDia
static void update_action_states (GcalSourceManagerDialog *dialog,
ESource *source);
+static void setup_edit_popover (GcalSourceManagerDialog *dialog,
+ GtkWidget *parent,
+ gint x,
+ gint y,
+ gint width,
+ gint height);
+
/* prototypes */
static void gcal_source_manager_dialog_constructed (GObject *object);
@@ -145,6 +156,39 @@ static GActionEntry action_entries[] =
};
/**
+ * button_release_cb:
+ *
+ * When right-clicked, show the edit
+ * popover pointing to the pointer
+ * position.
+ *
+ * Returns:
+ */
+static gboolean
+button_release_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer user_data)
+{
+ GcalSourceManagerDialogPrivate *priv;
+ GtkWidget *row;
+ ESource *source;
+
+ if (event->button != 3)
+ return GDK_EVENT_PROPAGATE;
+
+ priv = gcal_source_manager_dialog_get_instance_private (GCAL_SOURCE_MANAGER_DIALOG (user_data));
+ row = GTK_WIDGET (gtk_list_box_get_row_at_y (GTK_LIST_BOX (priv->sources_listbox), event->y));
+ source = g_hash_table_lookup (priv->row_to_source, row);
+
+ update_action_states (GCAL_SOURCE_MANAGER_DIALOG (user_data), source);
+
+ if (row != NULL)
+ setup_edit_popover (GCAL_SOURCE_MANAGER_DIALOG (user_data), priv->sources_listbox, event->x, event->y,
1, 1);
+
+ return GDK_EVENT_STOP;
+}
+
+/**
* color_action_activated:
*
* Change the source's color
@@ -407,8 +451,9 @@ row_activated_cb (GtkListBox *listbox,
if (row != NULL)
{
- gtk_popover_set_relative_to (GTK_POPOVER (priv->source_popover), GTK_WIDGET (row));
- gtk_widget_show (priv->source_popover);
+ setup_edit_popover (GCAL_SOURCE_MANAGER_DIALOG (user_data), GTK_WIDGET (row), 0, 0,
+ gtk_widget_get_allocated_width (GTK_WIDGET (row)),
+ gtk_widget_get_allocated_height (GTK_WIDGET (row)));
}
}
@@ -742,6 +787,35 @@ update_action_states (GcalSourceManagerDialog *dialog,
priv->updating = FALSE;
}
+/**
+ * setup_edit_popover:
+ *
+ * Place and show the edit sources popover.
+ *
+ * Returns:
+ */
+static void
+setup_edit_popover (GcalSourceManagerDialog *dialog,
+ GtkWidget *parent,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
+{
+ GcalSourceManagerDialogPrivate *priv = gcal_source_manager_dialog_get_instance_private (dialog);
+ GdkRectangle rect;
+
+ rect.x = x;
+ rect.y = y;
+ rect.width = width;
+ rect.height = height;
+
+ gtk_popover_set_relative_to (GTK_POPOVER (priv->source_popover), parent);
+ gtk_popover_set_pointing_to (GTK_POPOVER (priv->source_popover), &rect);
+
+ gtk_widget_show (priv->source_popover);
+}
+
GtkWidget *
gcal_source_manager_dialog_new (GcalManager *manager)
{
@@ -825,6 +899,7 @@ gcal_source_manager_dialog_class_init (GcalSourceManagerDialogClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GcalSourceManagerDialog, source_popover);
gtk_widget_class_bind_template_child_private (widget_class, GcalSourceManagerDialog, sources_listbox);
+ gtk_widget_class_bind_template_callback (widget_class, button_release_cb);
gtk_widget_class_bind_template_callback (widget_class, row_activated_cb);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]