[gtk+/client-side-decorations: 36/50] check for both ->client_side_decorated && ->decorated; motion/click only when not maximized
- From: Cody Russell <bratsche src gnome org>
- To: svn-commits-list gnome org
- Subject: [gtk+/client-side-decorations: 36/50] check for both ->client_side_decorated && ->decorated; motion/click only when not maximized
- Date: Wed, 8 Jul 2009 15:31:10 +0000 (UTC)
commit 096a6a151fc5ba9ecaa218b3fd50f2a2a0ebeff1
Author: Cody Russell <crussell canonical com>
Date: Thu May 28 17:46:07 2009 +0200
check for both ->client_side_decorated && ->decorated; motion/click only when not maximized
gtk/gtkwindow.c | 45 ++++++++++++++++++++++++++++++---------------
1 files changed, 30 insertions(+), 15 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index b8b4c5e..8a6f406 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -328,6 +328,8 @@ static void gtk_window_on_composited_changed (GdkScreen *screen,
static void gtk_window_set_label_widget (GtkWindow *window,
GtkWidget *label);
+static gboolean is_client_side_decorated (GtkWindow *window);
+
static GSList *toplevel_list = NULL;
static guint window_signals[LAST_SIGNAL] = { 0 };
@@ -3130,7 +3132,7 @@ gtk_window_set_decorated (GtkWindow *window,
if (GTK_WIDGET (window)->window)
{
- if (window->decorated && !priv->client_side_decorated)
+ if (window->decorated && !is_client_side_decorated (window))
{
gdk_window_set_decorations (GTK_WIDGET (window)->window,
GDK_DECOR_ALL);
@@ -4430,7 +4432,7 @@ gtk_window_move (GtkWindow *window,
info = gtk_window_get_geometry_info (window, TRUE);
- if (priv->client_side_decorated && priv->client_side_decorations & GDK_DECOR_BORDER)
+ if (is_client_side_decorated (window) && priv->client_side_decorations & GDK_DECOR_BORDER)
{
gtk_widget_style_get (widget,
"decoration-border-top", &frame_top,
@@ -4978,6 +4980,14 @@ gtk_window_unmap (GtkWidget *widget)
priv->below_initially = (state & GDK_WINDOW_STATE_BELOW) != 0;
}
+static gboolean
+is_client_side_decorated (GtkWindow *window)
+{
+ GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (window);
+
+ return priv->client_side_decorated && window->decorated;
+}
+
static void
gtk_window_realize (GtkWidget *widget)
{
@@ -5049,7 +5059,7 @@ gtk_window_realize (GtkWidget *widget)
GDK_LEAVE_NOTIFY_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_STRUCTURE_MASK);
- if (priv->client_side_decorated && window->type != GTK_WINDOW_POPUP)
+ if (is_client_side_decorated (window) && window->type != GTK_WINDOW_POPUP)
{
attributes.event_mask |= GDK_BUTTON_PRESS_MASK;
attributes.event_mask |= GDK_POINTER_MOTION_MASK;
@@ -5098,7 +5108,7 @@ gtk_window_realize (GtkWidget *widget)
if (window->wm_role)
gdk_window_set_role (widget->window, window->wm_role);
- if (!window->decorated || priv->client_side_decorated)
+ if (!window->decorated || is_client_side_decorated (window))
{
gdk_window_set_decorations (widget->window, 0);
}
@@ -5210,7 +5220,7 @@ gtk_window_size_request (GtkWidget *widget,
requisition->width = GTK_CONTAINER (window)->border_width * 2;
requisition->height = GTK_CONTAINER (window)->border_width * 2;
- if (priv->client_side_decorated && window->type != GTK_WINDOW_POPUP)
+ if (is_client_side_decorated (window) && window->type != GTK_WINDOW_POPUP)
{
GtkRequisition box_requisition;
gint child_height = 0;
@@ -5276,7 +5286,7 @@ gtk_window_size_allocate (GtkWidget *widget,
NULL);
}
- if (priv->client_side_decorated && priv->title_label && GTK_WIDGET_VISIBLE (priv->title_label))
+ if (is_client_side_decorated (window) && priv->title_label && GTK_WIDGET_VISIBLE (priv->title_label))
{
gtk_widget_get_child_requisition (priv->title_label, &deco_requisition);
@@ -5290,7 +5300,7 @@ gtk_window_size_allocate (GtkWidget *widget,
gtk_widget_size_allocate (priv->title_label, &deco_allocation);
}
- if (priv->client_side_decorated && priv->button_box && GTK_WIDGET_VISIBLE (priv->button_box))
+ if (is_client_side_decorated (window) && priv->button_box && GTK_WIDGET_VISIBLE (priv->button_box))
{
gtk_widget_get_child_requisition (priv->button_box, &box_requisition);
@@ -5304,7 +5314,7 @@ gtk_window_size_allocate (GtkWidget *widget,
if (window->bin.child && GTK_WIDGET_VISIBLE (window->bin.child))
{
- if (priv->client_side_decorated && window->type != GTK_WINDOW_POPUP)
+ if (is_client_side_decorated (window) && window->type != GTK_WINDOW_POPUP)
{
child_allocation.x = container->border_width + frame_left;
child_allocation.y = container->border_width
@@ -5495,7 +5505,7 @@ get_title_height (GtkWindow *window)
{
GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (window);
- if (!priv->client_side_decorated || !priv->title_label)
+ if (!is_client_side_decorated (window) || !priv->title_label)
return 0;
return priv->title_label->allocation.height;
@@ -5590,10 +5600,14 @@ gtk_window_button_press_event (GtkWidget *widget,
gint x = event->x;
gint y = event->y;
- if (priv->client_side_decorated)
+ if (is_client_side_decorated (GTK_WINDOW (widget)))
{
GtkWindowRegion region = get_region_type (GTK_WINDOW (widget), x, y);
GdkWindowEdge edge = (GdkWindowEdge)region;
+ GdkWindowState state = gdk_window_get_state (widget->window);
+
+ if (state & GDK_WINDOW_STATE_MAXIMIZED)
+ return TRUE;
if (region == GTK_WINDOW_REGION_TITLE ||
region == GTK_WINDOW_REGION_INNER)
@@ -5648,14 +5662,15 @@ update_cursor_at_position (GtkWidget *widget, gint x, gint y)
GtkWindowRegion region = get_region_type (GTK_WINDOW (widget), x, y);
GdkCursorType cursor_type;
GdkCursor *cursor;
+ GdkWindowState state = gdk_window_get_state (widget->window);
if (region == GTK_WINDOW_REGION_TITLE ||
- region == GTK_WINDOW_REGION_INNER)
+ region == GTK_WINDOW_REGION_INNER ||
+ (state & GDK_WINDOW_STATE_MAXIMIZED))
{
cursor_type = GDK_ARROW;
}
-
- if (region <= GTK_WINDOW_REGION_EDGE_SE)
+ else if (region <= GTK_WINDOW_REGION_EDGE_SE)
{
switch (region)
{
@@ -6558,7 +6573,7 @@ gtk_window_move_resize (GtkWindow *window)
configure_request_size_changed = FALSE;
configure_request_pos_changed = FALSE;
- if (priv->client_side_decorated && priv->client_side_decorations & GDK_DECOR_BORDER)
+ if (is_client_side_decorated (window) && priv->client_side_decorations & GDK_DECOR_BORDER)
{
gtk_widget_style_get (widget,
"decoration-border-top", &frame_top,
@@ -7154,7 +7169,7 @@ gtk_window_paint (GtkWidget *widget,
{
GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (widget);
- if (priv->client_side_decorated)
+ if (is_client_side_decorated (GTK_WINDOW (widget)))
{
gtk_paint_box (widget->style, widget->window, GTK_STATE_NORMAL,
GTK_SHADOW_OUT, area, widget, "decoration", 0, 0, -1, -1);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]