[PATCH] remove _NET_SUPPORTED when exiting/newwm/tmpwm and add _NET_WM_NAME
"Bernhard R. Link" <[email protected]>
| Newsgroups | gmane.comp.window-managers.ratpoison.devel |
|---|---|
| Message-ID | <[email protected]> |
The first patch makes sure _NET_SUPPORTED is always deleted before ratpoison exists. The second - built on the first - sets _NET_WM_NAME, in a way that might perhaps make it easier for such absurdities like java that like to write strange code and make exceptions for everything uncommon to detect that ratpoison is running, so that *maybe* in some future it might decide to not wait for a reparenting that will never happen in that case.... Hochachtungsvoll, Bernhard R. Link _______________________________________________ Ratpoison-devel mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/ratpoison-devel
0001-Move-screen-activation-code-to-new-de-activate_screen-functions.txt
(text/plain, 4.9 KB)
From 84762849c8a34b744ef43314f0870ea31af6214c Mon Sep 17 00:00:00 2001 From: Bernhard R. Link <[email protected]> Date: Sat, 3 Jan 2009 16:21:34 +0100 Subject: [PATCH] Move screen activation code to new (de)activate_screen functions, making sure _NET atoms are reset after tmpwm and deleted when exiting. --- src/actions.c | 6 ++---- src/events.c | 10 ++++++++++ src/main.c | 2 ++ src/screen.c | 30 ++++++++++++++++++++++++------ src/screen.h | 2 ++ 5 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/actions.c b/src/actions.c index ab5162e..731e343 100644 --- a/src/actions.c +++ b/src/actions.c @@ -4628,8 +4628,7 @@ cmd_tmpwm (int interactive, struct cmdarg **args) for (i=0; i<num_screens; i++) { XSelectInput(dpy, RootWindow (dpy, screens[i].screen_num), 0); - /* Unmap its key window */ - XUnmapWindow (dpy, screens[i].key_window); + deactivate_screen(&screens[i]); } /* Ungrab all our keys. */ @@ -4683,9 +4682,8 @@ cmd_tmpwm (int interactive, struct cmdarg **args) } while (tmpwm_error_raised); XSetErrorHandler (old_handler); - /* Map the key windows. */ for (i=0; i<num_screens; i++) - XMapWindow (dpy, screens[i].key_window); + activate_screen (&screens[i]); /* Sort through all the windows in each group and pick out the ones that are unmapped or destroyed. */ diff --git a/src/events.c b/src/events.c index 0e122a2..d973639 100644 --- a/src/events.c +++ b/src/events.c @@ -931,11 +931,17 @@ handle_signals (void) if (rp_exec_newwm) { + int i; + PRINT_DEBUG (("Switching to %s\n", rp_exec_newwm)); putenv(current_screen()->display_string); unhide_all_windows(); XSync(dpy, False); + for (i=0; i<num_screens; i++) + { + deactivate_screen(&screens[i]); + } execlp(rp_exec_newwm, rp_exec_newwm, NULL); /* Failed. Clean up. */ @@ -943,6 +949,10 @@ handle_signals (void) perror(" failed"); free (rp_exec_newwm); rp_exec_newwm = NULL; + for (i=0; i<num_screens; i++) + { + activate_screen(&screens[i]); + } } if (hup_signalled > 0) diff --git a/src/main.c b/src/main.c index 540bb6a..0f213c8 100644 --- a/src/main.c +++ b/src/main.c @@ -763,6 +763,8 @@ free_screen (rp_screen *s) frame_free (s, frame); } + deactivate_screen(s); + XDestroyWindow (dpy, s->bar_window); XDestroyWindow (dpy, s->key_window); XDestroyWindow (dpy, s->input_window); diff --git a/src/screen.c b/src/screen.c index 71a8f50..d978570 100644 --- a/src/screen.c +++ b/src/screen.c @@ -270,11 +270,6 @@ init_screen (rp_screen *s, int screen_num) | StructureNotifyMask); XSync (dpy, False); - /* Add netwm support. FIXME: I think this is busted. */ - XChangeProperty (dpy, RootWindow (dpy, screen_num), - _net_supported, XA_ATOM, 32, PropModeReplace, - (unsigned char*)&_net_wm_pid, 1); - /* Set the numset for the frames to our global numset. */ s->frames_numset = rp_frame_numset; @@ -327,7 +322,6 @@ init_screen (rp_screen *s, int screen_num) WhitePixel (dpy, s->screen_num), BlackPixel (dpy, s->screen_num)); XSelectInput (dpy, s->key_window, KeyPressMask | KeyReleaseMask); - XMapWindow (dpy, s->key_window); /* Create the input window. */ s->input_window = XCreateSimpleWindow (dpy, s->root, 0, 0, 1, 1, @@ -344,6 +338,8 @@ init_screen (rp_screen *s, int screen_num) s->height, 0, s->fg_color, s->bg_color); XSelectInput (dpy, s->help_window, KeyPressMask); + activate_screen(s); + XSync (dpy, 0); #ifdef USE_XFT_FONT @@ -370,6 +366,28 @@ init_screen (rp_screen *s, int screen_num) #endif } +void +activate_screen (rp_screen *s) +{ + /* Add netwm support. FIXME: I think this is busted. */ + XChangeProperty (dpy, RootWindow (dpy, s->screen_num), + _net_supported, XA_ATOM, 32, PropModeReplace, + (unsigned char*)&_net_wm_pid, 1); + + XMapWindow (dpy, s->key_window); +} + +void +deactivate_screen (rp_screen *s) +{ + /* Unmap its key window */ + XUnmapWindow (dpy, s->key_window); + + /* delete everything so noone sees them while we are not there */ + XDeleteProperty (dpy, RootWindow (dpy, s->screen_num), + _net_supported); +} + static int is_rp_window_for_given_screen (Window w, rp_screen *s) { diff --git a/src/screen.h b/src/screen.h index d83ba4b..6bad555 100644 --- a/src/screen.h +++ b/src/screen.h @@ -36,6 +36,8 @@ rp_frame *screen_get_frame (rp_screen *s, int frame_num); rp_frame *screen_find_frame_by_frame (rp_screen *s, rp_frame *f); void init_screens (int screen_arg, int screen_num); +void activate_screen (rp_screen *s); +void deactivate_screen (rp_screen *s); int is_rp_window_for_screen (Window w, rp_screen *s); int is_a_root_window (unsigned int w); -- 1.4.4.4
0002-set-_net_wm_name-for-the-root-window-to-ratpoison.txt
(text/plain, 2.4 KB)
From 69bd82b83172372110efd7e0ef506fb900522c7f Mon Sep 17 00:00:00 2001 From: Bernhard R. Link <[email protected]> Date: Sat, 3 Jan 2009 16:22:29 +0100 Subject: [PATCH] set _net_wm_name for the root window to ratpoison --- src/globals.c | 2 ++ src/globals.h | 2 ++ src/main.c | 2 ++ src/screen.c | 6 ++++++ 4 files changed, 12 insertions(+), 0 deletions(-) diff --git a/src/globals.c b/src/globals.c index 5f21148..9638996 100644 --- a/src/globals.c +++ b/src/globals.c @@ -52,6 +52,8 @@ Atom _net_wm_pid; Atom _net_supported; Atom _net_wm_window_type; Atom _net_wm_window_type_dialog; +Atom _net_wm_name; +Atom utf8_string; int rp_current_screen; rp_screen *screens; diff --git a/src/globals.h b/src/globals.h index c56bbca..881d3e4 100644 --- a/src/globals.h +++ b/src/globals.h @@ -119,6 +119,8 @@ extern Atom _net_wm_pid; extern Atom _net_supported; extern Atom _net_wm_window_type; extern Atom _net_wm_window_type_dialog; +extern Atom _net_wm_name; +extern Atom utf8_string; /* mouse properties */ extern int rat_x; diff --git a/src/main.c b/src/main.c index 0f213c8..a90ccf2 100644 --- a/src/main.c +++ b/src/main.c @@ -691,6 +691,8 @@ main (int argc, char *argv[]) PRINT_DEBUG (("_NET_SUPPORTED = %ld\n", _net_supported)); _net_wm_window_type = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); _net_wm_window_type_dialog = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); + _net_wm_name = XInternAtom(dpy, "_NET_WM_NAME", False); + utf8_string = XInternAtom(dpy, "UTF8_STRING", False); /* Setup signal handlers. */ XSetErrorHandler(handler); diff --git a/src/screen.c b/src/screen.c index d978570..702f10a 100644 --- a/src/screen.c +++ b/src/screen.c @@ -374,6 +374,10 @@ activate_screen (rp_screen *s) _net_supported, XA_ATOM, 32, PropModeReplace, (unsigned char*)&_net_wm_pid, 1); + /* set window manager name */ + XChangeProperty (dpy, RootWindow (dpy, s->screen_num), + _net_wm_name, utf8_string, 8, PropModeReplace, + (unsigned char*)"ratpoison", 9); XMapWindow (dpy, s->key_window); } @@ -386,6 +390,8 @@ deactivate_screen (rp_screen *s) /* delete everything so noone sees them while we are not there */ XDeleteProperty (dpy, RootWindow (dpy, s->screen_num), _net_supported); + XDeleteProperty (dpy, RootWindow (dpy, s->screen_num), + _net_wm_name); } static int -- 1.4.4.4