From 912afb6e6bc029e4be99f2d145399c63a5a88a80 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Thu, 9 May 2002 22:34:00 +0000 Subject: [PATCH] DefaultScreen() returns the screen number not Screen* 2002-05-09 Havoc Pennington * src/frames.c (show_tip_now): DefaultScreen() returns the screen number not Screen* * src/frame.c (meta_frame_sync_to_window): immediately repaint frame whenever we resize it, if we're inside a grab operation. * src/frames.c (meta_frames_repaint_frame): new function * src/window.c (meta_window_new): initialize window's colormap (meta_window_notify_focus): install the colormap for a window when it gets focus, uninstall on unfocus. * src/window.h (struct _MetaWindow): store window's colormap * src/display.c (event_callback): note changes to window colormap * src/frame.c (EVENT_MASK): add ColormapChangeMask --- ChangeLog | 20 ++++++++++++++++++++ src/display.c | 2 ++ src/frame.c | 17 ++++++++++++++--- src/frames.c | 19 ++++++++++++++++++- src/frames.h | 3 +++ src/ui.c | 7 +++++++ src/ui.h | 3 +++ src/window.c | 13 ++++++++++++- src/window.h | 1 + 9 files changed, 80 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index afb99385a..41665f95e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2002-05-09 Havoc Pennington + + * src/frames.c (show_tip_now): DefaultScreen() returns the screen + number not Screen* + + * src/frame.c (meta_frame_sync_to_window): immediately repaint + frame whenever we resize it, if we're inside a grab operation. + + * src/frames.c (meta_frames_repaint_frame): new function + + * src/window.c (meta_window_new): initialize window's colormap + (meta_window_notify_focus): install the colormap for a window when + it gets focus, uninstall on unfocus. + + * src/window.h (struct _MetaWindow): store window's colormap + + * src/display.c (event_callback): note changes to window colormap + + * src/frame.c (EVENT_MASK): add ColormapChangeMask + 2002-05-09 Havoc Pennington * src/display.c (event_callback): make Alt+button2 do a resize diff --git a/src/display.c b/src/display.c index 479dde825..325586fff 100644 --- a/src/display.c +++ b/src/display.c @@ -1248,6 +1248,8 @@ event_callback (XEvent *event, case SelectionNotify: break; case ColormapNotify: + if (window && !frame_was_receiver) + window->colormap = event->xcolormap.colormap; break; case ClientMessage: if (window) diff --git a/src/frame.c b/src/frame.c index 54d786b8e..62aa3f9a8 100644 --- a/src/frame.c +++ b/src/frame.c @@ -29,7 +29,8 @@ ButtonPressMask | ButtonReleaseMask | \ PointerMotionMask | PointerMotionHintMask | \ EnterWindowMask | LeaveWindowMask | \ - FocusChangeMask) + FocusChangeMask | \ + ColormapChangeMask) void meta_window_ensure_frame (MetaWindow *window) @@ -303,8 +304,18 @@ meta_frame_sync_to_window (MetaFrame *frame, frame->rect.height); if (need_resize) - meta_ui_reset_frame_bg (frame->window->screen->ui, - frame->xwindow); + { + meta_ui_reset_frame_bg (frame->window->screen->ui, + frame->xwindow); + + /* If we're interactively resizing the frame, repaint + * it immediately so we don't start to lag. + */ + if (frame->window->display->grab_window == + frame->window) + meta_ui_repaint_frame (frame->window->screen->ui, + frame->xwindow); + } } void diff --git a/src/frames.c b/src/frames.c index e5f57e2bf..7ab338060 100644 --- a/src/frames.c +++ b/src/frames.c @@ -636,6 +636,8 @@ meta_frames_set_title (MetaFrames *frames, frame = meta_frames_lookup_window (frames, xwindow); + g_assert (frame); + g_free (frame->title); frame->title = g_strdup (title); @@ -648,6 +650,21 @@ meta_frames_set_title (MetaFrames *frames, gdk_window_invalidate_rect (frame->window, NULL, FALSE); } +void +meta_frames_repaint_frame (MetaFrames *frames, + Window xwindow) +{ + GtkWidget *widget; + MetaUIFrame *frame; + + widget = GTK_WIDGET (frames); + + frame = meta_frames_lookup_window (frames, xwindow); + + g_assert (frame); + + gdk_window_process_updates (frame->window, TRUE); +} static void show_tip_now (MetaFrames *frames) @@ -731,7 +748,7 @@ show_tip_now (MetaFrames *frames) #ifdef HAVE_GTK_MULTIHEAD screen_number = gdk_screen_get_number (gtk_widget_get_screen (GTK_WIDGET (frames))); #else - screen_number = XScreenNumberOfScreen (DefaultScreen (gdk_display)); + screen_number = DefaultScreen (gdk_display); #endif meta_fixed_tip_show (gdk_display, screen_number, diff --git a/src/frames.h b/src/frames.h index a295b9e30..10e9380ac 100644 --- a/src/frames.h +++ b/src/frames.h @@ -109,6 +109,9 @@ void meta_frames_set_title (MetaFrames *frames, Window xwindow, const char *title); +void meta_frames_repaint_frame (MetaFrames *frames, + Window xwindow); + void meta_frames_get_geometry (MetaFrames *frames, Window xwindow, int *top_height, int *bottom_height, diff --git a/src/ui.c b/src/ui.c index 87eeef918..d59adb96e 100644 --- a/src/ui.c +++ b/src/ui.c @@ -216,6 +216,13 @@ meta_ui_unflicker_frame_bg (MetaUI *ui, target_width, target_height); } +void +meta_ui_repaint_frame (MetaUI *ui, + Window xwindow) +{ + meta_frames_repaint_frame (ui->frames, xwindow); +} + void meta_ui_reset_frame_bg (MetaUI *ui, Window xwindow) diff --git a/src/ui.h b/src/ui.h index f0f38c5a9..39b1817fe 100644 --- a/src/ui.h +++ b/src/ui.h @@ -80,6 +80,9 @@ void meta_ui_set_frame_title (MetaUI *ui, Window xwindow, const char *title); +void meta_ui_repaint_frame (MetaUI *ui, + Window xwindow); + MetaWindowMenu* meta_ui_window_menu_new (MetaUI *ui, Window client_xwindow, MetaMenuOp ops, diff --git a/src/window.c b/src/window.c index 7b5737c51..e28be25c3 100644 --- a/src/window.c +++ b/src/window.c @@ -316,7 +316,8 @@ meta_window_new (MetaDisplay *display, Window xwindow, window->depth = attrs.depth; window->xvisual = attrs.visual; - + window->colormap = attrs.colormap; + window->title = NULL; window->icon_name = NULL; window->icon = NULL; @@ -3393,6 +3394,11 @@ meta_window_notify_focus (MetaWindow *window, g_list_prepend (window->display->mru_list, window); if (window->frame) meta_frame_queue_draw (window->frame); + + meta_error_trap_push (window->display); + XInstallColormap (window->display->xdisplay, + window->colormap); + meta_error_trap_pop (window->display); } } else if (event->type == FocusOut || @@ -3421,6 +3427,11 @@ meta_window_notify_focus (MetaWindow *window, window->has_focus = FALSE; if (window->frame) meta_frame_queue_draw (window->frame); + + meta_error_trap_push (window->display); + XUninstallColormap (window->display->xdisplay, + window->colormap); + meta_error_trap_pop (window->display); } } diff --git a/src/window.h b/src/window.h index d13d3f614..2c886c82f 100644 --- a/src/window.h +++ b/src/window.h @@ -55,6 +55,7 @@ struct _MetaWindow MetaFrame *frame; int depth; Visual *xvisual; + Colormap colormap; char *desc; /* used in debug spew */ char *title;