[gnome-boxes/wip/ungrab-focus2: 1/3] tmp: ungrab focuses event_box
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-boxes/wip/ungrab-focus2: 1/3] tmp: ungrab focuses event_box
- Date: Fri, 18 Dec 2015 15:59:20 +0000 (UTC)
commit 49b31806bf09aa9452a18379e36e5329524e56ca
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date: Fri Dec 11 15:17:25 2015 +0000
tmp: ungrab focuses event_box
data/ui/display-page.ui | 1 +
data/ui/display-toolbar.ui | 1 +
src/display-page.vala | 44 +++++++++++++++++++++++++++++++++++++++++---
3 files changed, 43 insertions(+), 3 deletions(-)
---
diff --git a/data/ui/display-page.ui b/data/ui/display-page.ui
index 24da3be..fe6a8fc 100644
--- a/data/ui/display-page.ui
+++ b/data/ui/display-page.ui
@@ -45,6 +45,7 @@
<object class="GtkEventBox" id="event_box">
<property name="visible">True</property>
<property name="above-child">True</property>
+ <property name="can-focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<signal name="event" handler="on_event_box_event"/>
diff --git a/data/ui/display-toolbar.ui b/data/ui/display-toolbar.ui
index 65a2721..544d058 100644
--- a/data/ui/display-toolbar.ui
+++ b/data/ui/display-toolbar.ui
@@ -3,6 +3,7 @@
<!-- interface-requires gtk+ 3.9 -->
<template class="BoxesDisplayToolbar" parent="GtkHeaderBar">
<property name="visible">True</property>
+ <property name="can-focus">True</property>
<style>
<class name="titlebar"/>
</style>
diff --git a/src/display-page.vala b/src/display-page.vala
index 9741ab8..8faf5c3 100644
--- a/src/display-page.vala
+++ b/src/display-page.vala
@@ -54,7 +54,10 @@ private class Boxes.DisplayPage: Gtk.Box {
this.window = window;
overlay_toolbar_invisible_timeout = AppWindow.TRANSITION_DURATION;
- event_box.set_events (EventMask.POINTER_MOTION_MASK | EventMask.SCROLL_MASK);
+ event_box.set_events (EventMask.POINTER_MOTION_MASK |
+ EventMask.SCROLL_MASK |
+ EventMask.KEY_PRESS_MASK |
+ EventMask.KEY_RELEASE_MASK);
window.window_state_event.connect ((event) => {
update_toolbar_visible ();
@@ -138,6 +141,9 @@ private class Boxes.DisplayPage: Gtk.Box {
});
});
keyboard_grabbed_id = display.notify["keyboard-grabbed"].connect(() => {
+ if (!display.keyboard_grabbed)
+ event_box.grab_focus ();
+
Idle.add_full (Priority.HIGH, () => {
update_subtitle ();
return false;
@@ -203,8 +209,13 @@ private class Boxes.DisplayPage: Gtk.Box {
return widget;
}
+ private bool ctrl_released;
+ private bool alt_released;
+
[GtkCallback]
private bool on_event_box_event (Gdk.Event event) {
+ //print ("event: %s\n", event.type.to_string ());
+
if (window.fullscreened && event.type == EventType.MOTION_NOTIFY) {
var x = event.motion.x;
var y = event.motion.y;
@@ -238,8 +249,35 @@ private class Boxes.DisplayPage: Gtk.Box {
if (event.type == EventType.GRAB_BROKEN)
return false;
- if (event_box.get_child () != null)
- event_box.get_child ().event (event);
+ var widget = event_box.get_child ();
+
+ if (event.type == EventType.KEY_PRESS)
+ return false;
+
+ if (event.type == EventType.KEY_RELEASE) {
+ print ("key released\n");
+ // Receiving key events mean event_box is focused & keyboard in ungrabbed
+ if (event.key.keyval == Key.Control_L)
+ ctrl_released = true;
+ else if (event.key.keyval == Key.Alt_L)
+ alt_released = true;
+
+ if (ctrl_released && alt_released) {
+ print ("all released\n");
+ ctrl_released = false;
+ alt_released = false;
+
+ if (widget != null) {
+ print ("focusing\n");
+ widget.grab_focus ();
+ }
+ }
+
+ return false;
+ }
+
+ if (widget != null)
+ widget.event (event);
return false;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]