void obt_display_ignore_errors(gboolean ignore);
+#define obt_root(screen) (RootWindow(obt_display, screen))
+
G_END_DECLS
#endif /*__obt_display_h*/
glong data0, glong data1, glong data2, glong data3,
glong data4, glong mask)
{
- obt_prop_message_to(RootWindow(obt_display, screen), about, messagetype,
+ obt_prop_message_to(obt_root(screen), about, messagetype,
data0, data1, data2, data3, data4, mask);
}
} else
windows = NULL;
- OBT_PROP_SETA32(RootWindow(obt_display, ob_screen),
- NET_CLIENT_LIST, WINDOW, (gulong*)windows, size);
+ OBT_PROP_SETA32(obt_root(ob_screen), NET_CLIENT_LIST, WINDOW,
+ (gulong*)windows, size);
if (windows)
g_free(windows);
/* Setting the transient_for to Root is actually illegal, however
applications from time have done this to specify transient for
their group */
- if (!target && self->group && t == RootWindow(obt_display, ob_screen))
+ if (!target && self->group && t == obt_root(ob_screen))
trangroup = TRUE;
} else if (self->group && self->transient)
trangroup = TRUE;
attrib.event_mask = DOCK_EVENT_MASK;
attrib.override_redirect = True;
attrib.do_not_propagate_mask = DOCK_NOPROPAGATEMASK;
- dock->frame = XCreateWindow(obt_display,
- RootWindow(obt_display, ob_screen),
+ dock->frame = XCreateWindow(obt_display, obt_root(ob_screen),
0, 0, 1, 1, 0,
RrDepth(ob_rr_inst), InputOutput,
RrVisual(ob_rr_inst),
if (reparent)
XReparentWindow(obt_display, app->icon_win,
- RootWindow(obt_display, ob_screen), app->x, app->y);
+ obt_root(ob_screen), app->x, app->y);
dock->dock_apps = g_list_remove(dock->dock_apps, app);
dock_configure();
/* pick a window */
switch (e->type) {
case SelectionClear:
- window = RootWindow(obt_display, ob_screen);
+ window = obt_root(ob_screen);
break;
case MapRequest:
window = e->xmap.window;
/* These are the ones we want.. */
- if (win == RootWindow(obt_display, ob_screen)) {
+ if (win == obt_root(ob_screen)) {
/* If looking for a focus in on a client, then always return
FALSE for focus in's to the root window */
if (in_client_only)
return FALSE;
/* Focus left the root window revertedto state */
- if (win == RootWindow(obt_display, ob_screen))
+ if (win == obt_root(ob_screen))
return FALSE;
/* These are the ones we want.. */
obt_display_ignore_errors(TRUE);
if (XGetInputFocus(obt_display, &win, &i) &&
XGetGeometry(obt_display, win, &root, &i,&i,&u,&u,&u,&u) &&
- root != RootWindow(obt_display, ob_screen))
+ root != obt_root(ob_screen))
{
ob_debug_type(OB_DEBUG_FOCUS,
"Focus went to another screen !\n");
event_handle_dock(dock, e);
else if (menu)
event_handle_menu(menu, e);
- else if (window == RootWindow(obt_display, ob_screen))
+ else if (window == obt_root(ob_screen))
event_handle_root(e);
else if (e->type == MapRequest)
client_manage(window);
if (e->type == ButtonPress || e->type == ButtonRelease) {
/* If the button press was on some non-root window, or was physically
on the root window, the process it */
- if (window != RootWindow(obt_display, ob_screen) ||
+ if (window != obt_root(ob_screen) ||
e->xbutton.subwindow == None)
{
event_handle_user_input(client, e);
/* set the NET_ACTIVE_WINDOW hint, but preserve it on shutdown */
if (ob_state() != OB_STATE_EXITING) {
active = client ? client->window : None;
- OBT_PROP_SET32(RootWindow(obt_display, ob_screen),
- NET_ACTIVE_WINDOW, WINDOW, active);
+ OBT_PROP_SET32(obt_root(ob_screen), NET_ACTIVE_WINDOW, WINDOW, active);
}
}
attr.override_redirect = True;
attr.background_pixel = BlackPixel(obt_display, ob_screen);
focus_indicator.top.window =
- create_window(RootWindow(obt_display, ob_screen),
+ create_window(obt_root(ob_screen),
CWOverrideRedirect | CWBackPixel, &attr);
focus_indicator.left.window =
- create_window(RootWindow(obt_display, ob_screen),
+ create_window(obt_root(ob_screen),
CWOverrideRedirect | CWBackPixel, &attr);
focus_indicator.right.window =
- create_window(RootWindow(obt_display, ob_screen),
+ create_window(obt_root(ob_screen),
CWOverrideRedirect | CWBackPixel, &attr);
focus_indicator.bottom.window =
- create_window(RootWindow(obt_display, ob_screen),
+ create_window(obt_root(ob_screen),
CWOverrideRedirect | CWBackPixel, &attr);
stacking_add(INTERNALWINDOW_AS_WINDOW(&focus_indicator.top));
attrib.override_redirect = True;
attrib.border_pixel=RrColorPixel(ob_rr_theme->osd_border_color);
- popup.bg = create_window(RootWindow(obt_display, ob_screen),
- ob_rr_theme->obwidth,
+ popup.bg = create_window(obt_root(ob_screen), ob_rr_theme->obwidth,
CWOverrideRedirect | CWBorderPixel, &attrib);
popup.text = create_window(popup.bg, 0, 0, NULL);
mask |= CWColormap | CWBackPixel | CWBorderPixel;
/* create a colormap with the visual */
self->colormap = attrib.colormap =
- XCreateColormap(obt_display,
- RootWindow(obt_display, ob_screen),
+ XCreateColormap(obt_display, obt_root(ob_screen),
visual, AllocNone);
attrib.background_pixel = BlackPixel(obt_display, ob_screen);
attrib.border_pixel = BlackPixel(obt_display, ob_screen);
}
- self->window = createWindow(RootWindow(obt_display, ob_screen), visual,
+ self->window = createWindow(obt_root(ob_screen), visual,
mask, &attrib);
/* create the visible decor windows */
if (reparent) {
/* according to the ICCCM - if the client doesn't reparent itself,
then we will reparent the window to root for them */
- XReparentWindow(obt_display, self->client->window,
- RootWindow(obt_display, ob_screen),
- self->client->area.x,
- self->client->area.y);
+ XReparentWindow(obt_display, self->client->window, obt_root(ob_screen),
+ self->client->area.x, self->client->area.y);
}
/* remove all the windows for the frame from the window_map */
if (moveresize_in_progress)
return OB_FRAME_CONTEXT_MOVE_RESIZE;
- if (win == RootWindow(obt_display, ob_screen))
+ if (win == obt_root(ob_screen))
return OB_FRAME_CONTEXT_ROOT ;
if (client == NULL) return OB_FRAME_CONTEXT_NONE;
if (win == client->window) {
if (grab) {
if (kgrabs++ == 0) {
- ret = XGrabKeyboard(obt_display,
- RootWindow(obt_display, ob_screen),
+ ret = XGrabKeyboard(obt_display, obt_root(ob_screen),
False, GrabModeAsync, GrabModeAsync,
event_curtime) == Success;
if (!ret)
ret = XGrabPointer(obt_display, screen_support_win, owner_events,
GRAB_PTR_MASK,
GrabModeAsync, GrabModeAsync,
- (confine ? RootWindow(obt_display, ob_screen) :
- None),
+ (confine ? obt_root(ob_screen) : None),
ob_cursor(cur), event_curtime) == Success;
if (!ret)
--pgrabs;
{
KeyBindingTree *p;
- ungrab_all_keys(RootWindow(obt_display, ob_screen));
+ ungrab_all_keys(obt_root(ob_screen));
if (grab) {
p = curpos ? curpos->first_child : keyboard_firstnode;
while (p) {
if (p->key)
- grab_key(p->key, p->state, RootWindow(obt_display, ob_screen),
+ grab_key(p->key, p->state, obt_root(ob_screen),
GrabModeAsync);
p = p->next_sibling;
}
if (curpos)
grab_key(config_keyboard_reset_keycode,
config_keyboard_reset_state,
- RootWindow(obt_display, ob_screen), GrabModeAsync);
+ obt_root(ob_screen), GrabModeAsync);
}
}
self->show_from = show_from;
attr.event_mask = FRAME_EVENTMASK;
- self->window = createWindow(RootWindow(obt_display, ob_screen),
+ self->window = createWindow(obt_root(ob_screen),
CWEventMask, &attr);
XSetWindowBorderWidth(obt_display, self->window, ob_rr_theme->mbwidth);
/* Send client message telling the OB process to:
* remote_control = 1 -> reconfigure
* remote_control = 2 -> restart */
- OBT_PROP_MSG(ob_screen, RootWindow(obt_display, ob_screen),
+ OBT_PROP_MSG(ob_screen, obt_root(ob_screen),
OB_CONTROL, remote_control, 0, 0, 0, 0);
obt_display_close(obt_display);
exit(EXIT_SUCCESS);
/*
if (config_type != NULL)
- PROP_SETS(RootWindow(obt_display, ob_screen),
- ob_config, config_type);
+ PROP_SETS(obt_root(ob_screen), ob_config, config_type);
*/
/* we're done with parsing now, kill it */
if (ob_rr_theme == NULL)
ob_exit_with_error(_("Unable to load a theme."));
- OBT_PROP_SETS(RootWindow(obt_display, ob_screen),
+ OBT_PROP_SETS(obt_root(ob_screen),
OB_THEME, utf8, ob_rr_theme->name);
}
focus_nothing();
/* focus what was focused if a wm was already running */
- if (OBT_PROP_GET32(RootWindow(obt_display, ob_screen),
+ if (OBT_PROP_GET32(obt_root(ob_screen),
NET_ACTIVE_WINDOW, WINDOW, &xid) &&
(w = window_find(xid)) && WINDOW_IS_CLIENT(w))
{
self->iconwm = self->iconhm = 1;
attrib.override_redirect = True;
- self->bg = XCreateWindow(obt_display, RootWindow(obt_display, ob_screen),
+ self->bg = XCreateWindow(obt_display, obt_root(ob_screen),
0, 0, 1, 1, 0, RrDepth(ob_rr_inst),
InputOutput, RrVisual(ob_rr_inst),
CWOverrideRedirect, &attrib);
}
/* 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);
/* 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,
}
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"),
/* 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 */
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);
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)
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;
}
names[i] = g_strdup(it->data);
/* set the root window property */
- OBT_PROP_SETSS(RootWindow(obt_display, ob_screen),
+ OBT_PROP_SETSS(obt_root(ob_screen),
NET_DESKTOP_NAMES, utf8, (const gchar**)names);
g_strfreev(names);
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))
screen_set_num_desktops(d);
/* restore from session if possible */
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)
{
/* 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 &&
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);
/* 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)
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);
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 */
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) {
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
/* 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,
+ OBT_PROP_SETSS(obt_root(ob_screen), NET_DESKTOP_NAMES,
utf8, (const gchar**)screen_desktop_names);
}
}
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)
/* 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 */
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));
}
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;
}
}
}
- OBT_PROP_SETA32(RootWindow(obt_display, ob_screen),
- NET_CLIENT_LIST_STACKING, WINDOW, (gulong*)windows, i);
+ OBT_PROP_SETA32(obt_root(ob_screen), NET_CLIENT_LIST_STACKING, WINDOW,
+ (gulong*)windows, i);
g_free(windows);
}