[broadway] Handle screen size
Without this menu placement doesn't work right
This commit is contained in:
@ -282,14 +282,14 @@ function browserWindowClosed(win) {
|
|||||||
|
|
||||||
sendInput ("W", [surface.id]);
|
sendInput ("W", [surface.id]);
|
||||||
for (id in surfaces) {
|
for (id in surfaces) {
|
||||||
if (surfaces[id].transientToplevel != null && surfaces[id].transientToplevel == surface) {
|
if (surfaces[id].transientToplevel != null &&
|
||||||
|
surfaces[id].transientToplevel == surface) {
|
||||||
var childSurface = surfaces[id];
|
var childSurface = surfaces[id];
|
||||||
sendInput ("W", [childSurface.id]);
|
sendInput ("W", [childSurface.id]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function registerWindow(win)
|
function registerWindow(win)
|
||||||
{
|
{
|
||||||
toplevelWindows.push(win);
|
toplevelWindows.push(win);
|
||||||
@ -926,6 +926,22 @@ function connect()
|
|||||||
var ws = new WebSocket(loc, "broadway");
|
var ws = new WebSocket(loc, "broadway");
|
||||||
ws.onopen = function() {
|
ws.onopen = function() {
|
||||||
inputSocket = ws;
|
inputSocket = ws;
|
||||||
|
|
||||||
|
var w, h;
|
||||||
|
if (useToplevelWindows) {
|
||||||
|
w = window.screen.width;
|
||||||
|
h = window.screen.height;
|
||||||
|
} else {
|
||||||
|
w = window.innerWidth;
|
||||||
|
h = window.innerHeight;
|
||||||
|
win.onresize = function(ev) {
|
||||||
|
var w, h;
|
||||||
|
w = window.innerWidth;
|
||||||
|
h = window.innerHeight;
|
||||||
|
sendInput ("d", [w, h]);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
sendInput ("d", [w, h]);
|
||||||
};
|
};
|
||||||
ws.onclose = function() {
|
ws.onclose = function() {
|
||||||
inputSocket = null;
|
inputSocket = null;
|
||||||
|
|||||||
@ -265,6 +265,12 @@ parse_input_message (BroadwayInput *input, const char *message)
|
|||||||
msg.delete_notify.id = strtol(p, &p, 10);
|
msg.delete_notify.id = strtol(p, &p, 10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
msg.screen_resize_notify.width = strtol (p, &p, 10);
|
||||||
|
p++; /* Skip , */
|
||||||
|
msg.screen_resize_notify.height = strtol (p, &p, 10);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_printerr ("Unknown input command %s\n", message);
|
g_printerr ("Unknown input command %s\n", message);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -96,6 +96,12 @@ typedef struct {
|
|||||||
int height;
|
int height;
|
||||||
} BroadwayInputConfigureNotify;
|
} BroadwayInputConfigureNotify;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
BroadwayInputBaseMsg base;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
} BroadwayInputScreenResizeNotify;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
BroadwayInputBaseMsg base;
|
BroadwayInputBaseMsg base;
|
||||||
int id;
|
int id;
|
||||||
@ -111,6 +117,7 @@ typedef union {
|
|||||||
BroadwayInputGrabReply grab_reply;
|
BroadwayInputGrabReply grab_reply;
|
||||||
BroadwayInputConfigureNotify configure_notify;
|
BroadwayInputConfigureNotify configure_notify;
|
||||||
BroadwayInputDeleteNotify delete_notify;
|
BroadwayInputDeleteNotify delete_notify;
|
||||||
|
BroadwayInputScreenResizeNotify screen_resize_notify;
|
||||||
} BroadwayInputMsg;
|
} BroadwayInputMsg;
|
||||||
|
|
||||||
struct _GdkBroadwayDisplay
|
struct _GdkBroadwayDisplay
|
||||||
|
|||||||
@ -93,6 +93,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
|
|||||||
BroadwayInputMsg *message)
|
BroadwayInputMsg *message)
|
||||||
{
|
{
|
||||||
GdkBroadwayDisplay *display_broadway = GDK_BROADWAY_DISPLAY (display);
|
GdkBroadwayDisplay *display_broadway = GDK_BROADWAY_DISPLAY (display);
|
||||||
|
GdkScreen *screen;
|
||||||
GdkWindow *window;
|
GdkWindow *window;
|
||||||
GdkEvent *event = NULL;
|
GdkEvent *event = NULL;
|
||||||
GList *node;
|
GList *node;
|
||||||
@ -308,6 +309,16 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
screen = gdk_display_get_default_screen (display);
|
||||||
|
window = gdk_screen_get_root_window (screen);
|
||||||
|
window->width = message->screen_resize_notify.width;
|
||||||
|
window->height = message->screen_resize_notify.height;
|
||||||
|
|
||||||
|
_gdk_window_update_size (window);
|
||||||
|
_gdk_broadway_screen_size_changed (screen, &message->screen_resize_notify);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_printerr ("Unknown input command %c\n", message->base.type);
|
g_printerr ("Unknown input command %c\n", message->base.type);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -119,6 +119,8 @@ void _gdk_broadway_screen_query_visual_types (GdkScreen * screen,
|
|||||||
GdkVisualType **visual_types,
|
GdkVisualType **visual_types,
|
||||||
gint *count);
|
gint *count);
|
||||||
GList *_gdk_broadway_screen_list_visuals (GdkScreen *screen);
|
GList *_gdk_broadway_screen_list_visuals (GdkScreen *screen);
|
||||||
|
void _gdk_broadway_screen_size_changed (GdkScreen *screen,
|
||||||
|
BroadwayInputScreenResizeNotify *msg);
|
||||||
|
|
||||||
void _gdk_broadway_events_got_input (GdkDisplay *display,
|
void _gdk_broadway_events_got_input (GdkDisplay *display,
|
||||||
BroadwayInputMsg *message);
|
BroadwayInputMsg *message);
|
||||||
|
|||||||
@ -102,6 +102,23 @@ gdk_broadway_screen_get_root_window (GdkScreen *screen)
|
|||||||
return GDK_BROADWAY_SCREEN (screen)->root_window;
|
return GDK_BROADWAY_SCREEN (screen)->root_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_gdk_broadway_screen_size_changed (GdkScreen *screen, BroadwayInputScreenResizeNotify *msg)
|
||||||
|
{
|
||||||
|
GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
|
||||||
|
gint width, height;
|
||||||
|
|
||||||
|
width = gdk_screen_get_width (screen);
|
||||||
|
height = gdk_screen_get_height (screen);
|
||||||
|
|
||||||
|
broadway_screen->width = msg->width;
|
||||||
|
broadway_screen->height = msg->height;
|
||||||
|
|
||||||
|
if (width != gdk_screen_get_width (screen) ||
|
||||||
|
height != gdk_screen_get_height (screen))
|
||||||
|
g_signal_emit_by_name (screen, "size-changed");
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_broadway_screen_dispose (GObject *object)
|
gdk_broadway_screen_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user