From 126ed568fd60b518af16d0d63fa8980835dce0a3 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Fri, 29 Jul 2011 20:37:39 -0400 Subject: Add display switching to the local socket debugging interface. Allows programmatic switching of the display to a specific domain, server screen, or combined desktop screen. --- src/debug.c | 3 ++- src/display.c | 4 ++-- src/display.h | 7 ++++++- src/local.c | 26 ++++++++++++++++++++++++++ src/local.h | 1 + 5 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/debug.c b/src/debug.c index 86889d5..2781d85 100644 --- a/src/debug.c +++ b/src/debug.c @@ -39,7 +39,8 @@ usage(void) { bail("Usage: linpicker-cli [param...]\n\t" "0 - Dump views\n\t" - "1 - Register SAK"); + "1 - Register SAK\n\t" + "2 - Switch displays"); } int diff --git a/src/display.c b/src/display.c index 7ae89f2..511430e 100644 --- a/src/display.c +++ b/src/display.c @@ -57,8 +57,8 @@ #include "sak.h" #include "sclient.h" -static struct display *desktop_display; /* display for the combined desktop */ struct display *server_display; /* display for the server itself */ +struct display *desktop_display; /* display for the combined desktop */ struct display *active_display; /* currently active display */ static struct view_list thumbs; /* global list of thumbnails */ @@ -507,7 +507,7 @@ display_buffer_remove(struct buffer *b) free(d); } -int +static int init_graphics(int *argc, char ***argv) { DFBDisplayLayerConfig dl_config; diff --git a/src/display.h b/src/display.h index f48b619..4574ba7 100644 --- a/src/display.h +++ b/src/display.h @@ -65,8 +65,10 @@ struct display { CIRCLEQ_HEAD(display_cirq, display); -extern struct display *active_display; extern struct display *server_display; +extern struct display *desktop_display; +extern struct display *active_display; + extern IDirectFB *dfb; extern IDirectFBDisplayLayer *dl; @@ -82,6 +84,9 @@ display_secure_enter(int keycode); void display_secure_leave(void); +void +display_switch(struct display *d); + void display_update_mouselabel(struct display *d, struct client *client); diff --git a/src/local.c b/src/local.c index 36f1bbe..c3b24f0 100644 --- a/src/local.c +++ b/src/local.c @@ -57,6 +57,29 @@ local_set_sak(struct local_message *msg) sak_register(msg->param2, b->bg_view->display); } +static void +local_switch(struct local_message *msg) +{ + struct buffer *b; + struct display *d; + + switch (msg->param1) { + case -1: + d = server_display; + break; + case -2: + d = desktop_display; + break; + default: + b = buffer_lookup(msg->param1, 0); + d = b ? b->bg_view->display : server_display; + break; + } + + display_switch(d); + display_update_seclabel(d); +} + static void local_process(void *closure) { @@ -79,6 +102,9 @@ local_process(void *closure) case LINPICKER_LOCAL_SET_SAK: local_set_sak(&msg); break; + case LINPICKER_LOCAL_SWITCH: + local_switch(&msg); + break; default: break; } diff --git a/src/local.h b/src/local.h index 1e6c5eb..dfcce59 100644 --- a/src/local.h +++ b/src/local.h @@ -21,6 +21,7 @@ /* Messages accepted over the socket */ #define LINPICKER_LOCAL_DUMP_VIEWS 0 #define LINPICKER_LOCAL_SET_SAK 1 +#define LINPICKER_LOCAL_SWITCH 2 struct local_message { uint32_t type; -- cgit v1.2.3