From 7aad87e884d84e136b57daee0506d85327be59df Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Sat, 17 Apr 2010 20:18:12 +0200 Subject: [PATCH] Set _NET_WM_WINDOW_TYPE in menus. Looks bad with compiz otherwise. xlwmenu.c (set_window_type): New function. (make_windows_if_needed, XlwMenuRealize): Call set_window_type. --- lwlib/ChangeLog | 2 ++ lwlib/xlwmenu.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index 10993a80cfc..35cb646fbcb 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -24,6 +24,8 @@ (XlwMenuDestroy): Free pixmap. Call XtDestroyWidget instead of XDestroyWindow. (handle_motion_event): Only call handle_single_motion_event once. + (set_window_type): New function. + (make_windows_if_needed, XlwMenuRealize): Call set_window_type. * xlwmenuP.h (window_state): Add pixmap and w. diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c index b78d5075ef0..d396aa651e9 100644 --- a/lwlib/xlwmenu.c +++ b/lwlib/xlwmenu.c @@ -1314,6 +1314,23 @@ expose_cb (Widget widget, display_menu (mw, i, False, NULL, NULL, NULL, NULL, NULL); } +static void +set_window_type (Widget w, XlwMenuWidget mw) +{ + int popup_menu_p = mw->menu.top_depth == 1; + Atom type = XInternAtom (XtDisplay (w), + popup_menu_p + ? "_NET_WM_WINDOW_TYPE_POPUP_MENU" + : "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", + False); + + XChangeProperty (XtDisplay (w), XtWindow (w), + XInternAtom (XtDisplay (w), "_NET_WM_WINDOW_TYPE", False), + XA_ATOM, 32, PropModeReplace, + (unsigned char *)&type, 1); +} + + static void make_windows_if_needed (mw, n) XlwMenuWidget mw; @@ -1372,6 +1389,7 @@ make_windows_if_needed (mw, n) #ifdef HAVE_XFT windows [i].xft_draw = 0; #endif + set_window_type (windows [i].w, mw); } } @@ -2039,6 +2057,7 @@ XlwMenuRealize (w, valueMask, attributes) mw->menu.windows [0].width = w->core.width; mw->menu.windows [0].height = w->core.height; + set_window_type (mw->menu.windows [0].w, mw); create_pixmap_for_menu (&mw->menu.windows [0], mw); #ifdef HAVE_XFT -- 2.39.2