summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElijah Newren <newren gmail com>2006-08-07 21:04:44 +0000
committerElijah Newren <newren@src.gnome.org>2006-08-07 21:04:44 +0000
commitdcef402d6812115a878c7e4ea63c6b46640a023b (patch)
tree8d96a34792da17ef03e3e703115147e6b3959efd
parentd4973e8d1ba562cafabd58b6642cad3f06d617d6 (diff)
downloadmetacity-dcef402d6812115a878c7e4ea63c6b46640a023b.tar.gz
Patch from Björn Lindqvist to fix button lighting with dragged clicks.
2006-08-07 Elijah Newren <newren gmail com> Patch from Björn Lindqvist to fix button lighting with dragged clicks. #321474. * src/frames.c (meta_frames_button_press_event): update the prelit_control, (meta_frames_button_release_event): some code refactoring to simplify things a bit, and make sure to update the prelit_control
-rw-r--r--ChangeLog10
-rw-r--r--src/frames.c70
2 files changed, 36 insertions, 44 deletions
diff --git a/ChangeLog b/ChangeLog
index 8e70c625..1fc17f8e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2006-08-07 Elijah Newren <newren gmail com>
+ Patch from Björn Lindqvist to fix button lighting with dragged
+ clicks. #321474.
+
+ * src/frames.c (meta_frames_button_press_event): update the
+ prelit_control, (meta_frames_button_release_event): some code
+ refactoring to simplify things a bit, and make sure to update the
+ prelit_control
+
+2006-08-07 Elijah Newren <newren gmail com>
+
* src/keybindings.c (process_keyboard_move_grab): Patch from
Thomas Andersen to return the window to maximized state if the
window was "shaken loose" from maximized state during a resize but
diff --git a/src/frames.c b/src/frames.c
index d14d8415..6b740d9a 100644
--- a/src/frames.c
+++ b/src/frames.c
@@ -46,6 +46,9 @@ static void meta_frames_style_set (GtkWidget *widget,
static void meta_frames_realize (GtkWidget *widget);
static void meta_frames_unrealize (GtkWidget *widget);
+static void meta_frames_update_prelit_control (MetaFrames *frames,
+ MetaUIFrame *frame,
+ MetaFrameControl control);
static gboolean meta_frames_button_press_event (GtkWidget *widget,
GdkEventButton *event);
static gboolean meta_frames_button_release_event (GtkWidget *widget,
@@ -1194,15 +1197,6 @@ redraw_control (MetaFrames *frames,
}
static gboolean
-point_in_control (MetaFrames *frames,
- MetaUIFrame *frame,
- MetaFrameControl control,
- int x, int y)
-{
- return control == get_control (frames, frame, x, y);
-}
-
-static gboolean
meta_frames_button_press_event (GtkWidget *widget,
GdkEventButton *event)
{
@@ -1342,6 +1336,7 @@ meta_frames_button_press_event (GtkWidget *widget,
event->x_root,
event->y_root);
+ frame->prelit_control = control;
redraw_control (frames, frame, control);
if (op == META_GRAB_OP_CLICKING_MENU)
@@ -1525,67 +1520,54 @@ meta_frames_button_release_event (GtkWidget *widget,
if (frame->xwindow == meta_core_get_grab_frame (gdk_display) &&
((int) event->button) == meta_core_get_grab_button (gdk_display))
{
- gboolean end_grab;
-
- end_grab = FALSE;
+ MetaFrameControl control;
+ control = get_control (frames, frame, event->x, event->y);
+
switch (op)
{
case META_GRAB_OP_CLICKING_MINIMIZE:
- if (point_in_control (frames, frame,
- META_FRAME_CONTROL_MINIMIZE,
- event->x, event->y))
+ if (control == META_FRAME_CONTROL_MINIMIZE)
meta_core_minimize (gdk_display, frame->xwindow);
-
- redraw_control (frames, frame,
- META_FRAME_CONTROL_MINIMIZE);
- end_grab = TRUE;
+
+ meta_core_end_grab_op (gdk_display, event->time);
break;
case META_GRAB_OP_CLICKING_MAXIMIZE:
- if (point_in_control (frames, frame,
- META_FRAME_CONTROL_MAXIMIZE,
- event->x, event->y))
+ if (control == META_FRAME_CONTROL_MAXIMIZE)
meta_core_maximize (gdk_display, frame->xwindow);
-
- redraw_control (frames, frame,
- META_FRAME_CONTROL_MAXIMIZE);
- end_grab = TRUE;
+
+ meta_core_end_grab_op (gdk_display, event->time);
break;
case META_GRAB_OP_CLICKING_UNMAXIMIZE:
- if (point_in_control (frames, frame,
- META_FRAME_CONTROL_UNMAXIMIZE,
- event->x, event->y))
+ if (control == META_FRAME_CONTROL_UNMAXIMIZE)
meta_core_unmaximize (gdk_display, frame->xwindow);
-
- redraw_control (frames, frame,
- META_FRAME_CONTROL_MAXIMIZE);
- end_grab = TRUE;
+
+ meta_core_end_grab_op (gdk_display, event->time);
break;
case META_GRAB_OP_CLICKING_DELETE:
- if (point_in_control (frames, frame,
- META_FRAME_CONTROL_DELETE,
- event->x, event->y))
+ if (control == META_FRAME_CONTROL_DELETE)
meta_core_delete (gdk_display, frame->xwindow, event->time);
- redraw_control (frames, frame,
- META_FRAME_CONTROL_DELETE);
- end_grab = TRUE;
+
+ meta_core_end_grab_op (gdk_display, event->time);
break;
case META_GRAB_OP_CLICKING_MENU:
- redraw_control (frames, frame,
- META_FRAME_CONTROL_MENU);
- end_grab = TRUE;
+ meta_core_end_grab_op (gdk_display, event->time);
break;
default:
break;
}
- if (end_grab)
- meta_core_end_grab_op (gdk_display, event->time);
+ /* Update the prelit control regardless of what button the mouse
+ * was released over; needed so that the new button can become
+ * prelit so to let the user know that it can now be pressed.
+ * :)
+ */
+ meta_frames_update_prelit_control (frames, frame, control);
}
return TRUE;