xwm: Paint different decoration for active surface
This commit is contained in:
+25
-3
@@ -73,6 +73,7 @@ struct weston_wm {
|
|||||||
struct weston_xserver *server;
|
struct weston_xserver *server;
|
||||||
xcb_window_t wm_window;
|
xcb_window_t wm_window;
|
||||||
int border_width, title_height;
|
int border_width, title_height;
|
||||||
|
struct weston_wm_window *focus_window;
|
||||||
|
|
||||||
xcb_window_t selection_window;
|
xcb_window_t selection_window;
|
||||||
int incr;
|
int incr;
|
||||||
@@ -656,6 +657,9 @@ weston_wm_activate(struct weston_wm *wm,
|
|||||||
XCB_INPUT_FOCUS_POINTER_ROOT, window->id, time);
|
XCB_INPUT_FOCUS_POINTER_ROOT, window->id, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
weston_wm_window_schedule_repaint(struct weston_wm_window *window);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
weston_xserver_surface_activate(struct wl_listener *listener, void *data)
|
weston_xserver_surface_activate(struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
@@ -665,13 +669,22 @@ weston_xserver_surface_activate(struct wl_listener *listener, void *data)
|
|||||||
container_of(listener,
|
container_of(listener,
|
||||||
struct weston_xserver, activate_listener);
|
struct weston_xserver, activate_listener);
|
||||||
|
|
||||||
|
if (!wxs->wm)
|
||||||
|
return;
|
||||||
|
|
||||||
if (window)
|
if (window)
|
||||||
weston_wm_activate(wxs->wm, window, XCB_TIME_CURRENT_TIME);
|
weston_wm_activate(wxs->wm, window, XCB_TIME_CURRENT_TIME);
|
||||||
else if (wxs && wxs->wm)
|
else
|
||||||
xcb_set_input_focus (wxs->wm->conn,
|
xcb_set_input_focus (wxs->wm->conn,
|
||||||
XCB_INPUT_FOCUS_POINTER_ROOT,
|
XCB_INPUT_FOCUS_POINTER_ROOT,
|
||||||
XCB_NONE,
|
XCB_NONE,
|
||||||
XCB_TIME_CURRENT_TIME);
|
XCB_TIME_CURRENT_TIME);
|
||||||
|
|
||||||
|
if (wxs->wm->focus_window)
|
||||||
|
weston_wm_window_schedule_repaint(wxs->wm->focus_window);
|
||||||
|
wxs->wm->focus_window = window;
|
||||||
|
if (wxs->wm->focus_window)
|
||||||
|
weston_wm_window_schedule_repaint(wxs->wm->focus_window);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -813,7 +826,12 @@ weston_wm_window_draw_decoration(void *data)
|
|||||||
height);
|
height);
|
||||||
cr = cairo_create(surface);
|
cr = cairo_create(surface);
|
||||||
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
|
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
|
||||||
cairo_set_source_rgba(cr, 1, 0, 0, 0.8);
|
|
||||||
|
if (wm->focus_window == window)
|
||||||
|
cairo_set_source_rgba(cr, 1, 0, 0, 0.8);
|
||||||
|
else
|
||||||
|
cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
|
||||||
|
|
||||||
cairo_paint(cr);
|
cairo_paint(cr);
|
||||||
|
|
||||||
if (window->name)
|
if (window->name)
|
||||||
@@ -834,7 +852,11 @@ weston_wm_window_draw_decoration(void *data)
|
|||||||
font_extents.ascent;
|
font_extents.ascent;
|
||||||
|
|
||||||
cairo_move_to(cr, x, y);
|
cairo_move_to(cr, x, y);
|
||||||
cairo_set_source_rgb(cr, 1, 1, 1);
|
if (wm->focus_window == window)
|
||||||
|
cairo_set_source_rgb(cr, 1, 1, 1);
|
||||||
|
else
|
||||||
|
cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
|
||||||
|
|
||||||
cairo_show_text(cr, title);
|
cairo_show_text(cr, title);
|
||||||
|
|
||||||
cairo_destroy(cr);
|
cairo_destroy(cr);
|
||||||
|
|||||||
Reference in New Issue
Block a user