+#include "debug.h"
#include "openbox.h"
#include "dock.h"
#include "xerror.h"
#include "client.h"
#include "frame.h"
#include "focus.h"
+#include "popup.h"
#include "dispatch.h"
#include "extensions.h"
#include "render/render.h"
static Rect **area; /* array of desktop holding array of xinerama areas */
static Rect *monitor_area;
+static Popup *desktop_cycle_popup;
+static ObTimer *popup_timer = NULL;
+
#ifdef USE_LIBSN
static SnMonitorContext *sn_context;
static int sn_busy_cnt;
current_wm_sn_owner = XGetSelectionOwner(ob_display, wm_sn_atom);
if (current_wm_sn_owner) {
if (!ob_replace_wm) {
- g_message("A window manager is already running on screen %d",
+ g_warning("A window manager is already running on screen %d",
ob_screen);
return FALSE;
}
timestamp);
if (XGetSelectionOwner(ob_display, wm_sn_atom) != screen_support_win) {
- g_message("Could not acquire window manager selection on screen %d",
+ g_warning("Could not acquire window manager selection on screen %d",
ob_screen);
return FALSE;
}
}
if (wait >= timeout) {
- g_message("Timeout expired while waiting for the current WM to die "
+ g_warning("Timeout expired while waiting for the current WM to die "
"on screen %d", ob_screen);
return FALSE;
}
ROOT_EVENTMASK);
xerror_set_ignore(FALSE);
if (xerror_occured) {
- g_message("A window manager is already running on screen %d",
+ g_warning("A window manager is already running on screen %d",
ob_screen);
XDestroyWindow(ob_display, screen_support_win);
}
- g_message("Managing screen %d", ob_screen);
+ ob_debug("Managing screen %d\n", ob_screen);
set_root_cursor();
GSList *it;
guint i;
+ desktop_cycle_popup = popup_new(FALSE);
+
/* get the initial size */
screen_resize();
{
Rect **r;
+ popup_free(desktop_cycle_popup);
+
XSelectInput(ob_display, RootWindow(ob_display, ob_screen), NoEventMask);
/* we're not running here no more! */
if (ob_state() == OB_STATE_STARTING)
return;
- dock_configure();
screen_update_areas();
+ dock_configure();
for (it = client_list; it; it = it->next)
- client_move_onscreen(it->data);
+ client_move_onscreen(it->data, FALSE);
}
void screen_set_num_desktops(guint num)
screen_set_desktop(num - 1);
}
+static void popup_cycle_hide(ObTimer *t, void *d)
+{
+ timer_stop(t);
+ popup_timer = NULL;
+
+ popup_hide(desktop_cycle_popup);
+}
+
+static void popup_cycle_show()
+{
+ Rect *a;
+
+ a = screen_physical_area_monitor(0);
+ popup_position(desktop_cycle_popup, CenterGravity,
+ a->x + a->width / 2, a->y + a->height / 2);
+ /* XXX the size and the font extents need to be related on some level
+ */
+ popup_size(desktop_cycle_popup, POPUP_WIDTH, POPUP_HEIGHT);
+
+ popup_set_text_align(desktop_cycle_popup, RR_JUSTIFY_CENTER);
+
+ popup_show(desktop_cycle_popup,
+ screen_desktop_names[screen_desktop], NULL);
+
+ g_message("%s", screen_desktop_names[screen_desktop]);
+
+ if (popup_timer) timer_stop(popup_timer);
+ popup_timer = timer_start(G_USEC_PER_SEC / 2, popup_cycle_hide, NULL);
+}
+
void screen_set_desktop(guint num)
{
GList *it;
if (old == num) return;
- g_message("Moving to desktop %d", num+1);
+ ob_debug("Moving to desktop %d\n", num+1);
/* show windows before hiding the rest to lessen the enter/leave events */
from the switch so it doesnt mess with the focus */
while (XCheckTypedEvent(ob_display, EnterNotify, &e));
#ifdef DEBUG_FOCUS
- g_message("switch fallback");
+ ob_debug("switch fallback\n");
#endif
focus_fallback(OB_FOCUS_FALLBACK_DESKTOP);
#ifdef DEBUG_FOCUS
- g_message("/switch fallback");
+ ob_debug("/switch fallback\n");
#endif
+ if (ob_state() == OB_STATE_RUNNING)
+ popup_cycle_show();
+
dispatch_ob(Event_Ob_Desktop, num, old);
}
if (num < 4)
corner = OB_CORNER_TOPLEFT;
else {
- if (data[3] == prop_atoms.net_wm_topright)
+ if (data[3] == prop_atoms.net_wm_topleft)
+ corner = OB_CORNER_TOPLEFT;
+ else if (data[3] == prop_atoms.net_wm_topright)
corner = OB_CORNER_TOPRIGHT;
else if (data[3] == prop_atoms.net_wm_bottomright)
corner = OB_CORNER_BOTTOMRIGHT;
{
guint i, x;
guint32 *dims;
- Rect **old_area = area;
- Rect **rit;
GList *it;
g_free(monitor_area);
dims = g_new(guint32, 4 * screen_num_desktops);
- rit = old_area;
for (i = 0; i < screen_num_desktops + 1; ++i) {
Strut s;
int l, r, t, b;
}
}
PROP_SETA32(RootWindow(ob_display, ob_screen), net_workarea, cardinal,
- dims, 4 * screen_num_desktops);
+ dims, 4 * screen_num_desktops);
g_free(dims);
}
}
#ifdef USE_LIBSN
-static void sn_timeout(void *data)
+static void sn_timeout(ObTimer *t, void *data)
{
timer_stop(sn_timer);
sn_timer = NULL;