From 0ca04ed7aa4fe6844d44c084afd9b5897879eb79 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Tue, 12 Feb 2002 05:01:22 +0000 Subject: [PATCH] Set prelit_control to META_FRAME_CONTROL_NONE. 2002-02-12 Anders Carlsson * src/frames.c (meta_frames_manage_window): Set prelit_control to META_FRAME_CONTROL_NONE. (meta_frames_update_prelit_control): New function for setting the prelit control. (meta_frames_paint_to_drawable): Set prelight state. (meta_frames_enter_notify_event): Update prelit control. (meta_frames_leave_notify_event): Likewise. (meta_frames_motion_notify_event): Likewise. * src/frames.h (struct _MetaUIFrame): add prelit_control. --- ChangeLog | 11 ++++++++++ src/frames.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++---- src/frames.h | 2 ++ 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index faa907499..84b761753 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2002-02-12 Anders Carlsson + * src/frames.c (meta_frames_manage_window): Set prelit_control + to META_FRAME_CONTROL_NONE. + (meta_frames_update_prelit_control): New function for setting + the prelit control. + (meta_frames_paint_to_drawable): Set prelight state. + (meta_frames_enter_notify_event): Update prelit control. + (meta_frames_leave_notify_event): Likewise. + (meta_frames_motion_notify_event): Likewise. + + * src/frames.h (struct _MetaUIFrame): add prelit_control. + * src/window.c (update_mwm_hints): and MWM_FUNC_ALL with hints->functions instead of hints->flags. diff --git a/src/frames.c b/src/frames.c index 5e0e5a457..d6e5764fd 100644 --- a/src/frames.c +++ b/src/frames.c @@ -408,6 +408,7 @@ meta_frames_manage_window (MetaFrames *frames, frame->text_height = -1; frame->title = NULL; frame->expose_delayed = FALSE; + frame->prelit_control = META_FRAME_CONTROL_NONE; meta_core_grab_buttons (gdk_display, frame->xwindow); @@ -1089,6 +1090,32 @@ meta_frames_button_release_event (GtkWidget *widget, return TRUE; } +static void +meta_frames_update_prelit_control (MetaFrames *frames, + MetaUIFrame *frame, + MetaFrameControl control) +{ + MetaFrameControl old_control; + + /* Only prelight buttons */ + if (control != META_FRAME_CONTROL_MENU && + control != META_FRAME_CONTROL_MINIMIZE && + control != META_FRAME_CONTROL_MAXIMIZE && + control != META_FRAME_CONTROL_DELETE) + control = META_FRAME_CONTROL_NONE; + + if (control == frame->prelit_control) + return; + + /* Save the old control so we can unprelight it */ + old_control = frame->prelit_control; + + frame->prelit_control = control; + + redraw_control (frames, frame, old_control); + redraw_control (frames, frame, control); +} + static gboolean meta_frames_motion_notify_event (GtkWidget *widget, GdkEventMotion *event) @@ -1124,7 +1151,10 @@ meta_frames_motion_notify_event (GtkWidget *widget, gdk_window_get_pointer (frame->window, &x, &y, NULL); control = get_control (frames, frame, x, y); - + + /* Update prelit control */ + meta_frames_update_prelit_control (frames, frame, control); + cursor = META_CURSOR_DEFAULT; switch (control) @@ -1246,7 +1276,6 @@ meta_frames_paint_to_drawable (MetaFrames *frames, widget = GTK_WIDGET (frames); - /* note, prelight not implemented yet */ i = 0; while (i < META_BUTTON_TYPE_LAST) { @@ -1254,6 +1283,24 @@ meta_frames_paint_to_drawable (MetaFrames *frames, ++i; } + + /* Set prelight state */ + switch (frame->prelit_control) + { + case META_FRAME_CONTROL_MENU: + button_states[META_BUTTON_TYPE_MENU] = META_BUTTON_STATE_PRELIGHT; + break; + case META_FRAME_CONTROL_MINIMIZE: + button_states[META_BUTTON_TYPE_MINIMIZE] = META_BUTTON_STATE_PRELIGHT; + break; + case META_FRAME_CONTROL_MAXIMIZE: + button_states[META_BUTTON_TYPE_MAXIMIZE] = META_BUTTON_STATE_PRELIGHT; + break; + case META_FRAME_CONTROL_DELETE: + button_states[META_BUTTON_TYPE_CLOSE] = META_BUTTON_STATE_PRELIGHT; + break; + default: + } grab_frame = meta_core_get_grab_frame (gdk_display); @@ -1316,13 +1363,17 @@ meta_frames_enter_notify_event (GtkWidget *widget, { MetaUIFrame *frame; MetaFrames *frames; - + MetaFrameControl control; + frames = META_FRAMES (widget); frame = meta_frames_lookup_window (frames, GDK_WINDOW_XID (event->window)); if (frame == NULL) return FALSE; + control = get_control (frames, frame, event->x, event->y); + meta_frames_update_prelit_control (frames, frame, control); + return TRUE; } @@ -1339,12 +1390,14 @@ meta_frames_leave_notify_event (GtkWidget *widget, if (frame == NULL) return FALSE; + meta_frames_update_prelit_control (frames, frame, META_FRAME_CONTROL_NONE); + clear_tip (frames); meta_core_set_screen_cursor (gdk_display, frame->xwindow, META_CURSOR_DEFAULT); - + return TRUE; } diff --git a/src/frames.h b/src/frames.h index 66f27c7d9..6b3921440 100644 --- a/src/frames.h +++ b/src/frames.h @@ -71,6 +71,8 @@ struct _MetaUIFrame int text_height; char *title; /* NULL once we have a layout */ guint expose_delayed : 1; + + MetaFrameControl prelit_control; }; struct _MetaFrames