[gnome-music/gnome-3-10] Play/pause on pressing space



commit 1cc00de9ffd7f5ea8375d5f31ac81bfc19a446e2
Author: Vadim Rutkovsky <vrutkovs redhat com>
Date:   Fri Mar 7 01:21:03 2014 +0530

    Play/pause on pressing space
    
    https://bugzilla.gnome.org/show_bug.cgi?id=734490

 data/PlayerToolbar.ui |   10 +++++-----
 data/application.css  |   14 +++++++++++++-
 data/headerbar.ui.in  |   10 +++++-----
 gnomemusic/window.py  |   42 ++++++++++++++++++++++++++++--------------
 4 files changed, 51 insertions(+), 25 deletions(-)
---
diff --git a/data/PlayerToolbar.ui b/data/PlayerToolbar.ui
index 86e2495..1739d5a 100644
--- a/data/PlayerToolbar.ui
+++ b/data/PlayerToolbar.ui
@@ -60,7 +60,7 @@
                         <property name="width_request">42</property>
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
-                        <property name="can_focus">True</property>
+                        <property name="can_focus">False</property>
                         <property name="receives_default">True</property>
                         <property name="image">previous_image</property>
                         <property name="always_show_image">True</property>
@@ -76,7 +76,7 @@
                         <property name="width_request">60</property>
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
-                        <property name="can_focus">True</property>
+                        <property name="can_focus">False</property>
                         <property name="receives_default">True</property>
                         <property name="image">play_image</property>
                         <property name="always_show_image">True</property>
@@ -92,7 +92,7 @@
                         <property name="width_request">42</property>
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
-                        <property name="can_focus">True</property>
+                        <property name="can_focus">False</property>
                         <property name="receives_default">True</property>
                         <property name="image">next_image</property>
                         <property name="always_show_image">True</property>
@@ -201,7 +201,7 @@
                 <child>
                   <object class="GtkScale" id="progress_scale">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
+                    <property name="can_focus">False</property>
                     <property name="valign">center</property>
                     <property name="hexpand">True</property>
                     <property name="draw_value">False</property>
@@ -304,7 +304,7 @@
                     <child>
                       <object class="GtkMenuButton" id="menuButton">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
+                        <property name="can_focus">False</property>
                         <property name="has_focus">False</property>
                         <property name="is_focus">False</property>
                         <property name="receives_default">True</property>
diff --git a/data/application.css b/data/application.css
index 96b56b4..d30c888 100644
--- a/data/application.css
+++ b/data/application.css
@@ -11,7 +11,19 @@
 @define-color music_selection_button_dark_a #3b3b3b;
 @define-color music_selection_button_dark_b #1c1c1c;
 @define-color music_selection_box_dark_border #3e7b05;
-
+ binding-set UnbindSpace{
+    unbind "space";
+}
+ 
+GdMainListView{
+    gtk-key-bindings: UnbindSpace;
+}
+GdMainView{
+    gtk-key-bindings: UnbindSpace;
+}
+GtkTreeView{
+    gtk-key-bindings: UnbindSpace;
+}
 .cover{
     padding-left:24px;
 }
diff --git a/data/headerbar.ui.in b/data/headerbar.ui.in
index e60fc65..44b4911 100644
--- a/data/headerbar.ui.in
+++ b/data/headerbar.ui.in
@@ -59,7 +59,7 @@
     <child>
       <object class="GtkToggleButton" id="search-button">
         <property name="visible">True</property>
-        <property name="can_focus">True</property>
+        <property name="can_focus">False</property>
         <property name="valign">center</property>
         <property name="sensitive">True</property>
         <style>
@@ -81,7 +81,7 @@
     <child>
       <object class="GtkToggleButton" id="select-button">
         <property name="visible">True</property>
-        <property name="can_focus">True</property>
+        <property name="can_focus">False</property>
         <property name="valign">center</property>
         <property name="sensitive">True</property>
         <style>
@@ -104,7 +104,7 @@
       <object class="GtkButton" id="done-button">
         <property name="visible">False</property>
         <property name="no_show_all">True</property>
-        <property name="can_focus">True</property>
+        <property name="can_focus">False</property>
         <property name="label" translatable="yes">Cancel</property>
         <property name="valign">center</property>
         <property name="sensitive">True</property>
@@ -119,7 +119,7 @@
     <child>
       <object class="GtkButton" id="back-button">
         <property name="visible">True</property>
-        <property name="can_focus">True</property>
+        <property name="can_focus">False</property>
         <property name="valign">center</property>
         <property name="sensitive">True</property>
         <style>
@@ -151,7 +151,7 @@
     <child>
       <object class="GtkButton" id="close-button">
         <property name="visible">True</property>
-        <property name="can_focus">True</property>
+        <property name="can_focus">False</property>
         <property name="valign">center</property>
         <property name="relief">none</property>
         <property name="sensitive">True</property>
diff --git a/gnomemusic/window.py b/gnomemusic/window.py
index a75d0c2..1921ef4 100644
--- a/gnomemusic/window.py
+++ b/gnomemusic/window.py
@@ -34,7 +34,7 @@ from gi.repository import Gtk, Gdk, Gio, GLib, Tracker
 from gettext import gettext as _
 
 from gnomemusic.toolbar import Toolbar, ToolbarState
-from gnomemusic.player import Player, SelectionToolbar
+from gnomemusic.player import Player, SelectionToolbar, PlaybackStatus
 from gnomemusic.query import Query
 import gnomemusic.view as Views
 
@@ -139,7 +139,8 @@ class Window(Gtk.ApplicationWindow):
         self._stack = Stack(
             transition_type=StackTransitionType.CROSSFADE,
             transition_duration=100,
-            visible=True)
+            visible=True,
+            can_focus=False)
         if Gtk.get_minor_version() > 8:
             self.set_titlebar(self.toolbar.header_bar)
         else:
@@ -188,18 +189,31 @@ class Window(Gtk.ApplicationWindow):
 
     def _on_key_press(self, widget, event):
         modifiers = Gtk.accelerator_get_default_mod_mask()
-
-        if (event.keyval == Gdk.KEY_f and
-                (event.state & modifiers) == Gdk.ModifierType.CONTROL_MASK):
-            self.toolbar.searchbar.toggle_bar()
-        elif (event.keyval == Gdk.KEY_Escape and (event.state & modifiers) == 0):
-            self.toolbar.searchbar.show_bar(False)
-            if self.toolbar._selectionMode:
-                self.toolbar.set_selection_mode(False)
-        elif (event.state & modifiers) == 0 and \
-                event.keyval in range(33, 126) and \
-                not self.toolbar.searchbar.get_reveal_child():
-            self.toolbar.searchbar.show_bar(True)
+        event_and_modifiers = (event.state & modifiers)
+        if event_and_modifiers != 0:
+            # Open search bar on Ctrl + F
+            if (event.keyval == Gdk.KEY_f and
+                    event_and_modifiers == Gdk.ModifierType.CONTROL_MASK):
+                self.toolbar.searchbar.toggle_bar()
+        else:
+            # Close search bar after Esc is pressed
+            if event.keyval == Gdk.KEY_Escape:
+                self.toolbar.searchbar.show_bar(False)
+                # Also disable selection
+                if self.toolbar._selectionMode:
+                    self.toolbar.set_selection_mode(False)
+
+        # Open search bar when typing printable chars if it not opened
+        # Make sure we skip unprintable chars and don't grab space press
+        # (this is used for play/pause)
+        if not self.toolbar.searchbar.get_reveal_child() and not event.keyval == Gdk.KEY_space:
+            if (event_and_modifiers == Gdk.ModifierType.SHIFT_MASK or
+                    event_and_modifiers == 0) and \
+                    GLib.unichar_isprint(chr(Gdk.keyval_to_unicode(event.keyval))):
+                self.toolbar.searchbar.show_bar(True)
+        else:
+            if not self.toolbar.searchbar.get_reveal_child() and event.keyval == Gdk.KEY_space:
+                self.player.play_pause()
 
     def _notify_mode_disconnect(self, data=None):
         self._stack.disconnect(self._on_notify_model_id)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]