guint screen_last_desktop;
Size screen_physical_size;
gboolean screen_showing_desktop;
-DesktopLayout screen_desktop_layout;
+ObDesktopLayout screen_desktop_layout;
gchar **screen_desktop_names;
Window screen_support_win;
Time screen_desktop_user_time = CurrentTime;
return TRUE;
}
-gboolean screen_annex(const gchar *program_name)
+gboolean screen_annex()
{
XSetWindowAttributes attrib;
pid_t pid;
return FALSE;
}
-
screen_set_root_cursor();
/* set the OPENBOX_PID hint */
net_supporting_wm_check, window, screen_support_win);
/* set properties on the supporting window */
- PROP_SETS(screen_support_win, net_wm_name, program_name);
+ PROP_SETS(screen_support_win, net_wm_name, "Openbox");
PROP_SET32(screen_support_win, net_supporting_wm_check,
window, screen_support_win);
supported[i++] = prop_atoms.kde_net_wm_frame_strut;
supported[i++] = prop_atoms.kde_net_wm_window_type_override;
- supported[i++] = prop_atoms.openbox_wm_state_undecorated;
+ supported[i++] = prop_atoms.ob_wm_action_undecorate;
+ supported[i++] = prop_atoms.ob_wm_state_undecorated;
supported[i++] = prop_atoms.openbox_pid;
- supported[i++] = prop_atoms.openbox_config;
- supported[i++] = prop_atoms.openbox_control;
+ supported[i++] = prop_atoms.ob_config;
+ supported[i++] = prop_atoms.ob_control;
g_assert(i == num_support);
PROP_SETA32(RootWindow(ob_display, ob_screen),
{
guint i, numnames;
gchar **names;
- GSList *it;
+ GSList *it, *namelist;
guint32 d;
desktop_cycle_popup = pager_popup_new(FALSE);
pager_popup_height(desktop_cycle_popup, POPUP_HEIGHT);
- if (reconfig)
+ if (reconfig) {
+ /* update the pager popup's width */
+ pager_popup_text_width_to_strings(desktop_cycle_popup,
+ screen_desktop_names,
+ screen_num_desktops);
return;
+ }
/* get the initial size */
screen_resize();
/* get the desktop names */
- numnames = g_slist_length(config_desktops_names);
+ namelist = session_desktop_names ?
+ session_desktop_names : config_desktops_names;
+ numnames = g_slist_length(namelist);
names = g_new(gchar*, numnames + 1);
names[numnames] = NULL;
- for (i = 0, it = config_desktops_names; it; ++i, it = g_slist_next(it))
+ for (i = 0, it = namelist; it; ++i, it = g_slist_next(it))
names[i] = g_strdup(it->data);
/* set the root window property */
/* set the number of desktops */
screen_num_desktops = 0;
- screen_set_num_desktops(config_desktops_num);
+ if (session_num_desktops)
+ screen_set_num_desktops(session_num_desktops);
+ else
+ screen_set_num_desktops(config_desktops_num);
/* start on the current desktop when a wm was already running */
if (PROP_GET32(RootWindow(ob_display, ob_screen),
PROP_SET32(RootWindow(ob_display, ob_screen),
net_showing_desktop, cardinal, screen_showing_desktop);
- screen_update_layout();
+ if (session_desktop_layout_present)
+ screen_desktop_layout = session_desktop_layout;
+ else
+ screen_update_layout();
}
void screen_shutdown(gboolean reconfig)
to call xsetinputfocus on the window ourselves. otherwise there is
no guarantee the window will actually take focus.. */
if (c->can_focus) {
- /* do this here so that if you switch desktops to a window with
- helper windows then the helper windows won't flash */
- client_bring_helper_windows(c);
/* reduce flicker by hiliting now rather than waiting for the
server FocusIn event */
frame_adjust_focus(c->frame, TRUE);
+ /* do this here so that if you switch desktops to a window with
+ helper windows then the helper windows won't flash */
+ client_bring_helper_windows(c);
}
}
}
}
- event_ignore_queued_enters();
+ event_ignore_all_queued_enters();
if (event_curtime != CurrentTime)
screen_desktop_user_time = event_curtime;
{
guint r, c;
static guint d = (guint)-1;
- guint ret;
+ guint ret, oldd;
if (d == (guint)-1)
d = screen_desktop;
if ((cancel || done) && dialog)
goto show_cycle_dialog;
+ oldd = d;
get_row_col(d, &r, &c);
if (linear) {
case OB_DIRECTION_EAST:
++c;
if (c >= screen_desktop_layout.columns) {
- if (wrap) {
+ if (wrap)
c = 0;
- } else {
- d = screen_desktop;
+ else
goto show_cycle_dialog;
- }
}
d = translate_row_col(r, c);
if (d >= screen_num_desktops) {
if (wrap) {
++c;
} else {
- d = screen_desktop;
+ d = oldd;
goto show_cycle_dialog;
}
}
case OB_DIRECTION_WEST:
--c;
if (c >= screen_desktop_layout.columns) {
- if (wrap) {
+ if (wrap)
c = screen_desktop_layout.columns - 1;
- } else {
- d = screen_desktop;
+ else
goto show_cycle_dialog;
- }
}
d = translate_row_col(r, c);
if (d >= screen_num_desktops) {
if (wrap) {
--c;
} else {
- d = screen_desktop;
+ d = oldd;
goto show_cycle_dialog;
}
}
case OB_DIRECTION_SOUTH:
++r;
if (r >= screen_desktop_layout.rows) {
- if (wrap) {
+ if (wrap)
r = 0;
- } else {
- d = screen_desktop;
+ else
goto show_cycle_dialog;
- }
}
d = translate_row_col(r, c);
if (d >= screen_num_desktops) {
if (wrap) {
++r;
} else {
- d = screen_desktop;
+ d = oldd;
goto show_cycle_dialog;
}
}
case OB_DIRECTION_NORTH:
--r;
if (r >= screen_desktop_layout.rows) {
- if (wrap) {
+ if (wrap)
r = screen_desktop_layout.rows - 1;
- } else {
- d = screen_desktop;
+ else
goto show_cycle_dialog;
- }
}
d = translate_row_col(r, c);
if (d >= screen_num_desktops) {
if (wrap) {
--r;
} else {
- d = screen_desktop;
+ d = oldd;
goto show_cycle_dialog;
}
}
else
i = 0;
if (i < screen_num_desktops) {
+ GSList *it;
+
screen_desktop_names = g_renew(gchar*, screen_desktop_names,
screen_num_desktops + 1);
screen_desktop_names[screen_num_desktops] = NULL;
- for (; i < screen_num_desktops; ++i)
- screen_desktop_names[i] = g_strdup_printf("desktop %i", i + 1);
+
+ it = g_slist_nth(config_desktops_names, i);
+
+ for (; i < screen_num_desktops; ++i) {
+ if (it)
+ /* use the names from the config file when possible */
+ screen_desktop_names[i] = g_strdup(it->data);
+ else
+ /* make up a nice name if it's not though */
+ screen_desktop_names[i] = g_strdup_printf("desktop %i", i + 1);
+ if (it) it = g_slist_next(it);
+ }
+
+ /* if we changed any names, then set the root property so we can
+ all agree on the names */
+ PROP_SETSS(RootWindow(ob_display, ob_screen), net_desktop_names,
+ screen_desktop_names);
}
/* resize the pager for these names */
{
if (sn_app_starting())
XDefineCursor(ob_display, RootWindow(ob_display, ob_screen),
- ob_cursor(OB_CURSOR_BUSY));
+ ob_cursor(OB_CURSOR_BUSYPOINTER));
else
XDefineCursor(ob_display, RootWindow(ob_display, ob_screen),
ob_cursor(OB_CURSOR_POINTER));