X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=fcd0de8c42ff2dccdb530db000cd40f687c623dd;hb=76464a604ee2999b00b806be25722f7fcac1cd9c;hp=db4f25b776c4e215423cd7205f36b5443cfd8cd9;hpb=0fcf5ead0fb38710e6277da8b59c6ad19f907092;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index db4f25b7..fcd0de8c 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -24,7 +24,6 @@ #include "startupnotify.h" #include "moveresize.h" #include "config.h" -#include "mainloop.h" #include "screen.h" #include "client.h" #include "session.h" @@ -36,6 +35,7 @@ #include "gettext.h" #include "obt/display.h" #include "obt/prop.h" +#include "obt/mainloop.h" #include #ifdef HAVE_UNISTD_H @@ -146,8 +146,7 @@ static gboolean replace_wm(void) } /* Send client message indicating that we are now the WM */ - obt_prop_message(ob_screen, RootWindow(obt_display, ob_screen), - OBT_PROP_ATOM(MANAGER), + obt_prop_message(ob_screen, obt_root(ob_screen), OBT_PROP_ATOM(MANAGER), timestamp, wm_sn_atom, screen_support_win, 0, 0, SubstructureNotifyMask); @@ -164,8 +163,7 @@ gboolean screen_annex(void) /* create the netwm support window */ attrib.override_redirect = TRUE; attrib.event_mask = PropertyChangeMask; - screen_support_win = XCreateWindow(obt_display, - RootWindow(obt_display, ob_screen), + screen_support_win = XCreateWindow(obt_display, obt_root(ob_screen), -100, -100, 1, 1, 0, CopyFromParent, InputOutput, CopyFromParent, @@ -180,8 +178,7 @@ gboolean screen_annex(void) } obt_display_ignore_errors(TRUE); - XSelectInput(obt_display, RootWindow(obt_display, ob_screen), - ROOT_EVENTMASK); + XSelectInput(obt_display, obt_root(ob_screen), ROOT_EVENTMASK); obt_display_ignore_errors(FALSE); if (obt_display_error_occured) { g_message(_("A window manager is already running on screen %d"), @@ -195,15 +192,14 @@ gboolean screen_annex(void) /* set the OPENBOX_PID hint */ pid = getpid(); - OBT_PROP_SET32(RootWindow(obt_display, ob_screen), - OPENBOX_PID, CARDINAL, pid); + OBT_PROP_SET32(obt_root(ob_screen), OPENBOX_PID, CARDINAL, pid); /* set supporting window */ - OBT_PROP_SET32(RootWindow(obt_display, ob_screen), + OBT_PROP_SET32(obt_root(ob_screen), NET_SUPPORTING_WM_CHECK, WINDOW, screen_support_win); /* set properties on the supporting window */ - OBT_PROP_SETS(screen_support_win, NET_WM_NAME, "Openbox"); + OBT_PROP_SETS(screen_support_win, NET_WM_NAME, utf8, "Openbox"); OBT_PROP_SET32(screen_support_win, NET_SUPPORTING_WM_CHECK, WINDOW, screen_support_win); @@ -294,10 +290,11 @@ gboolean screen_annex(void) supported[i++] = OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED); supported[i++] = OBT_PROP_ATOM(OPENBOX_PID); supported[i++] = OBT_PROP_ATOM(OB_THEME); + supported[i++] = OBT_PROP_ATOM(OB_CONFIG_FILE); supported[i++] = OBT_PROP_ATOM(OB_CONTROL); g_assert(i == num_support); - OBT_PROP_SETA32(RootWindow(obt_display, ob_screen), + OBT_PROP_SETA32(obt_root(ob_screen), NET_SUPPORTED, ATOM, supported, num_support); g_free(supported); @@ -331,13 +328,13 @@ static void screen_tell_ksplash(void) something. oh well. */ e.xclient.type = ClientMessage; e.xclient.display = obt_display; - e.xclient.window = RootWindow(obt_display, ob_screen); + e.xclient.window = obt_root(ob_screen); e.xclient.message_type = XInternAtom(obt_display, "_KDE_SPLASH_PROGRESS", False ); e.xclient.format = 8; strcpy(e.xclient.data.b, "wm started"); - XSendEvent(obt_display, RootWindow(obt_display, ob_screen), - False, SubstructureNotifyMask, &e ); + XSendEvent(obt_display, obt_root(ob_screen), + False, SubstructureNotifyMask, &e); } void screen_startup(gboolean reconfig) @@ -361,9 +358,7 @@ void screen_startup(gboolean reconfig) screen_resize(); /* have names already been set for the desktops? */ - if (OBT_PROP_GETSS(RootWindow(obt_display, ob_screen), - NET_DESKTOP_NAMES, utf8, &names)) - { + if (OBT_PROP_GETSS(obt_root(ob_screen), NET_DESKTOP_NAMES, utf8, &names)) { g_strfreev(names); namesexist = TRUE; } @@ -384,8 +379,8 @@ void screen_startup(gboolean reconfig) names[i] = g_strdup(it->data); /* set the root window property */ - OBT_PROP_SETSS(RootWindow(obt_display, ob_screen), - NET_DESKTOP_NAMES, names); + OBT_PROP_SETSS(obt_root(ob_screen), + NET_DESKTOP_NAMES, utf8, (const gchar**)names); g_strfreev(names); } @@ -395,9 +390,15 @@ void screen_startup(gboolean reconfig) this will also set the default names from the config file up for desktops that don't have names yet */ screen_num_desktops = 0; - if (OBT_PROP_GET32(RootWindow(obt_display, ob_screen), + if (OBT_PROP_GET32(obt_root(ob_screen), NET_NUMBER_OF_DESKTOPS, CARDINAL, &d)) + { + if (d != config_desktops_num) { + g_warning(_("Openbox is configured for %d desktops, but the current session has %d. Overriding the Openbox configuration."), + config_desktops_num, d); + } screen_set_num_desktops(d); + } /* restore from session if possible */ else if (session_num_desktops) screen_set_num_desktops(session_num_desktops); @@ -406,7 +407,7 @@ void screen_startup(gboolean reconfig) screen_desktop = screen_num_desktops; /* something invalid */ /* start on the current desktop when a wm was already running */ - if (OBT_PROP_GET32(RootWindow(obt_display, ob_screen), + if (OBT_PROP_GET32(obt_root(ob_screen), NET_CURRENT_DESKTOP, CARDINAL, &d) && d < screen_num_desktops) { @@ -421,7 +422,7 @@ void screen_startup(gboolean reconfig) /* don't start in showing-desktop mode */ screen_showing_desktop = FALSE; - OBT_PROP_SET32(RootWindow(obt_display, ob_screen), + OBT_PROP_SET32(obt_root(ob_screen), NET_SHOWING_DESKTOP, CARDINAL, screen_showing_desktop); if (session_desktop_layout_present && @@ -440,15 +441,14 @@ void screen_shutdown(gboolean reconfig) if (reconfig) return; - XSelectInput(obt_display, RootWindow(obt_display, ob_screen), - NoEventMask); + XSelectInput(obt_display, obt_root(ob_screen), NoEventMask); /* we're not running here no more! */ - OBT_PROP_ERASE(RootWindow(obt_display, ob_screen), OPENBOX_PID); + OBT_PROP_ERASE(obt_root(ob_screen), OPENBOX_PID); /* not without us */ - OBT_PROP_ERASE(RootWindow(obt_display, ob_screen), NET_SUPPORTED); + OBT_PROP_ERASE(obt_root(ob_screen), NET_SUPPORTED); /* don't keep this mode */ - OBT_PROP_ERASE(RootWindow(obt_display, ob_screen), NET_SHOWING_DESKTOP); + OBT_PROP_ERASE(obt_root(ob_screen), NET_SHOWING_DESKTOP); XDestroyWindow(obt_display, screen_support_win); @@ -473,7 +473,7 @@ void screen_resize(void) /* Set the _NET_DESKTOP_GEOMETRY hint */ screen_physical_size.width = geometry[0] = w; screen_physical_size.height = geometry[1] = h; - OBT_PROP_SETA32(RootWindow(obt_display, ob_screen), + OBT_PROP_SETA32(obt_root(ob_screen), NET_DESKTOP_GEOMETRY, CARDINAL, geometry, 2); if (ob_state() == OB_STATE_STARTING) @@ -498,12 +498,11 @@ void screen_set_num_desktops(guint num) old = screen_num_desktops; screen_num_desktops = num; - OBT_PROP_SET32(RootWindow(obt_display, ob_screen), - NET_NUMBER_OF_DESKTOPS, CARDINAL, num); + OBT_PROP_SET32(obt_root(ob_screen), NET_NUMBER_OF_DESKTOPS, CARDINAL, num); /* set the viewport hint */ viewport = g_new0(gulong, num * 2); - OBT_PROP_SETA32(RootWindow(obt_display, ob_screen), + OBT_PROP_SETA32(obt_root(ob_screen), NET_DESKTOP_VIEWPORT, CARDINAL, viewport, num * 2); g_free(viewport); @@ -599,8 +598,7 @@ void screen_set_desktop(guint num, gboolean dofocus) if (previous == num) return; - OBT_PROP_SET32(RootWindow(obt_display, ob_screen), - NET_CURRENT_DESKTOP, CARDINAL, num); + OBT_PROP_SET32(obt_root(ob_screen), NET_CURRENT_DESKTOP, CARDINAL, num); /* This whole thing decides when/how to save the screen_last_desktop so that it can be restored later if you want */ @@ -661,11 +659,11 @@ void screen_set_desktop(guint num, gboolean dofocus) } } screen_desktop_timeout = FALSE; - ob_main_loop_timeout_remove(ob_main_loop, last_desktop_func); - ob_main_loop_timeout_add(ob_main_loop, REMEMBER_LAST_DESKTOP_TIME, - last_desktop_func, NULL, NULL, NULL); + obt_main_loop_timeout_remove(ob_main_loop, last_desktop_func); + obt_main_loop_timeout_add(ob_main_loop, REMEMBER_LAST_DESKTOP_TIME, + last_desktop_func, NULL, NULL, NULL); - ob_debug("Moving to desktop %d\n", num+1); + ob_debug("Moving to desktop %d", num+1); /* ignore enter events caused by the move */ ignore_start = event_start_ignore_all_enters(); @@ -722,7 +720,7 @@ void screen_add_desktop(gboolean current) parent - which will have to be on the same desktop */ !client_direct_parent(c)) { - ob_debug("moving window %s\n", c->title); + ob_debug("moving window %s", c->title); client_set_desktop(c, c->desktop+1, FALSE, TRUE); } } @@ -763,7 +761,7 @@ void screen_remove_desktop(gboolean current) parent - which will have to be on the same desktop */ !client_direct_parent(c)) { - ob_debug("moving window %s\n", c->title); + ob_debug("moving window %s", c->title); client_set_desktop(c, c->desktop - 1, TRUE, TRUE); } /* raise all the windows that are on the current desktop which @@ -773,7 +771,7 @@ void screen_remove_desktop(gboolean current) (d == DESKTOP_ALL || d == screen_desktop)) { stacking_raise(CLIENT_AS_WINDOW(c)); - ob_debug("raising window %s\n", c->title); + ob_debug("raising window %s", c->title); } } } @@ -781,7 +779,7 @@ void screen_remove_desktop(gboolean current) /* fallback focus like we're changing desktops */ if (screen_desktop < screen_num_desktops - 1) { screen_fallback_focus(); - ob_debug("fake desktop change\n"); + ob_debug("fake desktop change"); } screen_set_num_desktops(screen_num_desktops-1); @@ -922,15 +920,15 @@ void screen_show_desktop_popup(guint d) MAX(a->width/3, POPUP_WIDTH)); pager_popup_show(desktop_popup, screen_desktop_names[d], d); - ob_main_loop_timeout_remove(ob_main_loop, hide_desktop_popup_func); - ob_main_loop_timeout_add(ob_main_loop, config_desktop_popup_time * 1000, - hide_desktop_popup_func, NULL, NULL, NULL); + obt_main_loop_timeout_remove(ob_main_loop, hide_desktop_popup_func); + obt_main_loop_timeout_add(ob_main_loop, config_desktop_popup_time * 1000, + hide_desktop_popup_func, NULL, NULL, NULL); g_free(a); } void screen_hide_desktop_popup(void) { - ob_main_loop_timeout_remove(ob_main_loop, hide_desktop_popup_func); + obt_main_loop_timeout_remove(ob_main_loop, hide_desktop_popup_func); pager_popup_hide(desktop_popup); } @@ -1089,7 +1087,7 @@ void screen_update_layout(void) screen_desktop_layout.rows = 1; screen_desktop_layout.columns = screen_num_desktops; - if (OBT_PROP_GETA32(RootWindow(obt_display, ob_screen), + if (OBT_PROP_GETA32(obt_root(ob_screen), NET_DESKTOP_LAYOUT, CARDINAL, &data, &num)) { if (num == 3 || num == 4) { @@ -1134,7 +1132,7 @@ void screen_update_desktop_names(void) g_strfreev(screen_desktop_names); screen_desktop_names = NULL; - if (OBT_PROP_GETSS(RootWindow(obt_display, ob_screen), + if (OBT_PROP_GETSS(obt_root(ob_screen), NET_DESKTOP_NAMES, utf8, &screen_desktop_names)) for (i = 0; screen_desktop_names[i] && i < screen_num_desktops; ++i); else @@ -1161,8 +1159,8 @@ void screen_update_desktop_names(void) /* if we changed any names, then set the root property so we can all agree on the names */ - OBT_PROP_SETSS(RootWindow(obt_display, ob_screen), NET_DESKTOP_NAMES, - screen_desktop_names); + OBT_PROP_SETSS(obt_root(ob_screen), NET_DESKTOP_NAMES, + utf8, (const gchar**)screen_desktop_names); } /* resize the pager for these names */ @@ -1229,8 +1227,7 @@ void screen_show_desktop(gboolean show, ObClient *show_only) } show = !!show; /* make it boolean */ - OBT_PROP_SET32(RootWindow(obt_display, ob_screen), - NET_SHOWING_DESKTOP, CARDINAL, show); + OBT_PROP_SET32(obt_root(ob_screen), NET_SHOWING_DESKTOP, CARDINAL, show); } void screen_install_colormap(ObClient *client, gboolean install) @@ -1294,7 +1291,6 @@ static void get_xinerama_screens(Rect **xin_areas, guint *nxin) gint l, r, t, b; if (ob_debug_xinerama) { - g_print("Using fake xinerama !\n"); gint w = WidthOfScreen(ScreenOfDisplay(obt_display, ob_screen)); gint h = HeightOfScreen(ScreenOfDisplay(obt_display, ob_screen)); *nxin = 2; @@ -1454,7 +1450,7 @@ void screen_update_areas(void) /* all the work areas are not used here, only the ones for the first monitor are */ - OBT_PROP_SETA32(RootWindow(obt_display, ob_screen), NET_WORKAREA, CARDINAL, + OBT_PROP_SETA32(obt_root(ob_screen), NET_WORKAREA, CARDINAL, dims, 4 * screen_num_desktops); /* the area has changed, adjust all the windows if they need it */ @@ -1696,10 +1692,10 @@ Rect* screen_physical_area_active(void) void screen_set_root_cursor(void) { if (sn_app_starting()) - XDefineCursor(obt_display, RootWindow(obt_display, ob_screen), + XDefineCursor(obt_display, obt_root(ob_screen), ob_cursor(OB_CURSOR_BUSYPOINTER)); else - XDefineCursor(obt_display, RootWindow(obt_display, ob_screen), + XDefineCursor(obt_display, obt_root(ob_screen), ob_cursor(OB_CURSOR_POINTER)); } @@ -1710,12 +1706,12 @@ gboolean screen_pointer_pos(gint *x, gint *y) guint u; gboolean ret; - ret = !!XQueryPointer(obt_display, RootWindow(obt_display, ob_screen), + ret = !!XQueryPointer(obt_display, obt_root(ob_screen), &w, &w, x, y, &i, &i, &u); if (!ret) { for (i = 0; i < ScreenCount(obt_display); ++i) if (i != ob_screen) - if (XQueryPointer(obt_display, RootWindow(obt_display, i), + if (XQueryPointer(obt_display, obt_root(i), &w, &w, x, y, &i, &i, &u)) break; }