[gtk+/client-side-decorations: 69/92] popup menu when clicking on the title icon
- From: Cody Russell <bratsche src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/client-side-decorations: 69/92] popup menu when clicking on the title icon
- Date: Fri, 16 Apr 2010 19:32:54 +0000 (UTC)
commit be24e129396bb81865193fbbbe246c1fd46ca5a5
Author: Cody Russell <bratsche gnome org>
Date: Wed Jul 15 08:34:20 2009 -0500
popup menu when clicking on the title icon
gtk/gtkwindow.c | 71 +++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 51 insertions(+), 20 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 5dee0e0..97d0d97 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -38,6 +38,7 @@
#include "gtkprivate.h"
#include "gtkrc.h"
#include "gtkbutton.h"
+#include "gtkeventbox.h"
#include "gtkwindow.h"
#include "gtklabel.h"
#include "gtkbindings.h"
@@ -226,6 +227,7 @@ struct _GtkWindowPrivate
gchar *startup_id;
GtkWidget *title_label;
+ GtkWidget *icon_event_box;
GtkWidget *title_icon;
GtkWidget *min_button;
GtkWidget *max_button;
@@ -1561,6 +1563,8 @@ update_window_buttons (GtkWindow *window)
// close?
+ if (priv->icon_event_box)
+ gtk_widget_show (priv->icon_event_box);
if (priv->title_icon)
gtk_widget_show (priv->title_icon);
if (priv->title_label)
@@ -1570,6 +1574,8 @@ update_window_buttons (GtkWindow *window)
{
if (priv->button_box)
gtk_widget_hide (priv->button_box);
+ if (priv->icon_event_box)
+ gtk_widget_hide (priv->icon_event_box);
if (priv->title_icon)
gtk_widget_hide (priv->title_icon);
if (priv->title_label)
@@ -3670,6 +3676,18 @@ icon_list_from_theme (GtkWidget *widget,
return list;
}
+static gboolean
+icon_button_press (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer user_data)
+{
+ GtkWindow *window = (GtkWindow *)user_data;
+
+ gtk_window_do_popup (window, event);
+
+ return TRUE;
+}
+
static void
ensure_title_icon (GtkWindow *window)
{
@@ -3677,14 +3695,25 @@ ensure_title_icon (GtkWindow *window)
ensure_title_box (window);
- if (!priv->title_icon)
+ if (!priv->icon_event_box)
{
+ priv->icon_event_box = gtk_event_box_new ();
+ gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->icon_event_box), FALSE);
+
priv->title_icon = gtk_image_new ();
+
+ gtk_container_add (GTK_CONTAINER (priv->icon_event_box),
+ priv->title_icon);
+
+ g_signal_connect (G_OBJECT (priv->icon_event_box),
+ "button-press-event",
+ G_CALLBACK (icon_button_press),
+ window);
}
- gtk_widget_set_parent (priv->title_icon, GTK_WIDGET (window));
+ gtk_widget_set_parent (priv->icon_event_box, GTK_WIDGET (window));
- gtk_widget_show (priv->title_icon);
+ gtk_widget_show_all (priv->icon_event_box);
if (GTK_WIDGET_VISIBLE (window))
{
@@ -5054,11 +5083,11 @@ gtk_window_map (GtkWidget *widget)
gtk_widget_map (priv->title_label);
}
- if (priv->title_icon &&
- GTK_WIDGET_VISIBLE (priv->title_icon) &&
- !GTK_WIDGET_MAPPED (priv->title_icon))
+ if (priv->icon_event_box &&
+ GTK_WIDGET_VISIBLE (priv->icon_event_box) &&
+ !GTK_WIDGET_MAPPED (priv->icon_event_box))
{
- gtk_widget_map (priv->title_icon);
+ gtk_widget_map (priv->icon_event_box);
}
if (priv->button_box &&
@@ -5216,6 +5245,8 @@ is_client_side_decorated (GtkWindow *window)
"client-side-decorated", &client_side_decorated,
NULL);
+ return TRUE;
+
return client_side_decorated;
}
@@ -5471,9 +5502,9 @@ gtk_window_size_request (GtkWidget *widget,
child_height = child_requisition.height;
}
- if (priv->title_icon && GTK_WIDGET_VISIBLE (priv->title_icon))
+ if (priv->icon_event_box && GTK_WIDGET_VISIBLE (priv->icon_event_box))
{
- gtk_widget_size_request (priv->title_icon, &icon_requisition);
+ gtk_widget_size_request (priv->icon_event_box, &icon_requisition);
child_height = MAX (child_height, icon_requisition.height);
}
@@ -5524,9 +5555,9 @@ get_available_size_for_label (GtkWindow *window)
available_size -= border_width * 2;
- if (priv->title_icon && GTK_WIDGET_VISIBLE (priv->title_icon))
+ if (priv->icon_event_box && GTK_WIDGET_VISIBLE (priv->icon_event_box))
{
- available_size -= priv->title_icon->allocation.width;
+ available_size -= priv->icon_event_box->allocation.width;
}
if (priv->button_box && GTK_WIDGET_VISIBLE (priv->button_box))
@@ -5571,9 +5602,9 @@ gtk_window_size_allocate (GtkWidget *widget,
NULL);
}
- if (client_decorated && priv->title_icon && gtk_widget_get_visible (priv->title_icon))
+ if (client_decorated && priv->icon_event_box && gtk_widget_get_visible (priv->icon_event_box))
{
- gtk_widget_get_child_requisition (priv->title_icon, &deco_requisition);
+ gtk_widget_get_child_requisition (priv->icon_event_box, &deco_requisition);
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
deco_allocation.x = allocation->width - frame_width - deco_requisition.width;
@@ -5586,7 +5617,7 @@ gtk_window_size_allocate (GtkWidget *widget,
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
left_width = deco_allocation.width;
- gtk_widget_size_allocate (priv->title_icon, &deco_allocation);
+ gtk_widget_size_allocate (priv->icon_event_box, &deco_allocation);
}
if (client_decorated && priv->button_box && gtk_widget_get_visible (priv->button_box))
@@ -6426,8 +6457,8 @@ gtk_window_forall (GtkContainer *container,
if (bin->child)
(* callback) (bin->child, callback_data);
- if (priv->title_icon)
- (* callback) (priv->title_icon, callback_data);
+ if (priv->icon_event_box)
+ (* callback) (priv->icon_event_box, callback_data);
if (priv->title_label)
(* callback) (priv->title_label, callback_data);
@@ -6443,11 +6474,11 @@ gtk_window_remove (GtkContainer *container,
GtkWindow *window = GTK_WINDOW (container);
GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (window);
- if (priv->title_icon && priv->title_icon == child)
+ if (priv->icon_event_box && priv->icon_event_box == child)
{
- gtk_widget_unparent (priv->title_icon);
- gtk_widget_destroy (priv->title_icon);
- priv->title_icon = NULL;
+ gtk_widget_unparent (priv->icon_event_box);
+ gtk_widget_destroy (priv->icon_event_box);
+ priv->icon_event_box = NULL;
}
else if (priv->title_label && priv->title_label == child)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]