mir: allow windows to become focused

Send focus change events to toplevels in response to getting the event
from mir.

Now that the window is focused, cursor blink works, so wire up those
GtkSettings as well.
This commit is contained in:
Ryan Lortie
2014-05-28 16:21:31 +02:00
parent f036567c13
commit 6d37f01b78
2 changed files with 36 additions and 4 deletions

View File

@@ -472,6 +472,23 @@ generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdoubl
send_event (window, get_pointer (window), event);
}
static void
generate_focus_event (GdkWindow *window, gboolean focused)
{
GdkEvent *event;
if (focused)
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FOCUSED);
else
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FOCUSED, 0);
event = gdk_event_new (GDK_FOCUS_CHANGE);
event->focus_change.send_event = FALSE;
event->focus_change.in = focused;
send_event (window, get_pointer (window), event);
}
static guint
get_modifier_state (unsigned int modifiers, unsigned int button_state)
{
@@ -603,10 +620,7 @@ handle_surface_event (GdkWindow *window, const MirSurfaceEvent *event)
case mir_surface_attrib_swapinterval:
break;
case mir_surface_attrib_focus:
if (event->value)
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FOCUSED);
else
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FOCUSED, 0);
generate_focus_event (window, event->value != 0);
break;
default:
break;

View File

@@ -525,6 +525,24 @@ gdk_mir_screen_get_setting (GdkScreen *screen,
return TRUE;
}
if (g_str_equal (name, "gtk-cursor-blink"))
{
g_value_set_boolean (value, TRUE);
return TRUE;
}
if (g_str_equal (name, "gtk-cursor-blink-time"))
{
g_value_set_int (value, 1200);
return TRUE;
}
if (g_str_equal (name, "gtk-cursor-blink-timeout"))
{
g_value_set_int (value, 10);
return TRUE;
}
g_error ("unknown property %s", name);
return FALSE;