mirror of
https://github.com/SoongNoonien/mpdevil.git
synced 2023-08-10 21:12:44 +03:00
improved global key bindings
This commit is contained in:
parent
b685885563
commit
b4e8ad0eb8
163
bin/mpdevil
163
bin/mpdevil
|
@ -912,7 +912,7 @@ class SearchWindow(Gtk.Box):
|
|||
self._tags=Gtk.ComboBoxText()
|
||||
|
||||
# search entry
|
||||
self._search_entry=Gtk.SearchEntry()
|
||||
self.search_entry=Gtk.SearchEntry()
|
||||
|
||||
# label
|
||||
self._hits_label=Gtk.Label(xalign=1)
|
||||
|
@ -970,14 +970,14 @@ class SearchWindow(Gtk.Box):
|
|||
column_time.set_sort_column_id(4)
|
||||
|
||||
# connect
|
||||
self._search_entry.connect("search-changed", self._on_search_changed)
|
||||
self.search_entry.connect("search-changed", self._on_search_changed)
|
||||
self._tags.connect("changed", self._on_search_changed)
|
||||
self._client.emitter.connect("reconnected", self._on_reconnected)
|
||||
self._client.emitter.connect("disconnected", self._on_disconnected)
|
||||
|
||||
# packing
|
||||
hbox=Gtk.Box(spacing=6, border_width=6)
|
||||
hbox.pack_start(self._search_entry, True, True, 0)
|
||||
hbox.pack_start(self.search_entry, True, True, 0)
|
||||
hbox.pack_end(self._tags, False, False, 0)
|
||||
self._hits_label.set_margin_end(6)
|
||||
self._action_bar.pack_end(self._hits_label)
|
||||
|
@ -985,20 +985,14 @@ class SearchWindow(Gtk.Box):
|
|||
self.pack_start(Gtk.Separator.new(orientation=Gtk.Orientation.HORIZONTAL), False, False, 0)
|
||||
self.pack_start(self._songs_window, True, True, 0)
|
||||
|
||||
def start(self):
|
||||
self._search_entry.grab_focus()
|
||||
|
||||
def started(self):
|
||||
return self._search_entry.has_focus()
|
||||
|
||||
def clear(self, *args):
|
||||
self._songs_view.clear()
|
||||
self._search_entry.set_text("")
|
||||
self.search_entry.set_text("")
|
||||
self._tags.remove_all()
|
||||
|
||||
def _on_disconnected(self, *args):
|
||||
self._tags.set_sensitive(False)
|
||||
self._search_entry.set_sensitive(False)
|
||||
self.search_entry.set_sensitive(False)
|
||||
self.clear()
|
||||
|
||||
def _on_reconnected(self, *args):
|
||||
|
@ -1008,13 +1002,13 @@ class SearchWindow(Gtk.Box):
|
|||
self._tags.append_text(tag)
|
||||
self._tags.set_active(0)
|
||||
self._tags.set_sensitive(True)
|
||||
self._search_entry.set_sensitive(True)
|
||||
self.search_entry.set_sensitive(True)
|
||||
|
||||
def _on_search_changed(self, widget):
|
||||
self._songs_view.clear()
|
||||
self._hits_label.set_text("")
|
||||
if len(self._search_entry.get_text()) > 1:
|
||||
songs=self._client.wrapped_call("search", self._tags.get_active_text(), self._search_entry.get_text())
|
||||
if len(self.search_entry.get_text()) > 1:
|
||||
songs=self._client.wrapped_call("search", self._tags.get_active_text(), self.search_entry.get_text())
|
||||
for s in songs:
|
||||
song=ClientHelper.extend_song_for_display(ClientHelper.song_to_str_dict(s))
|
||||
self._store.append([
|
||||
|
@ -1718,6 +1712,10 @@ class AlbumWindow(FocusFrame):
|
|||
GLib.idle_add(callback)
|
||||
|
||||
class Browser(Gtk.Paned):
|
||||
__gsignals__={
|
||||
'search_focus_changed': (GObject.SignalFlags.RUN_FIRST, None, (bool,))
|
||||
}
|
||||
|
||||
def __init__(self, client, settings, window):
|
||||
super().__init__(orientation=Gtk.Orientation.HORIZONTAL) # paned1
|
||||
|
||||
|
@ -1747,6 +1745,8 @@ class Browser(Gtk.Paned):
|
|||
# connect
|
||||
self.back_to_current_album_button.connect("clicked", self.back_to_current_album)
|
||||
self.search_button.connect("toggled", self._on_search_toggled)
|
||||
self._search_window.search_entry.connect("focus_in_event", lambda *args: self.emit("search_focus_changed", True))
|
||||
self._search_window.search_entry.connect("focus_out_event", lambda *args: self.emit("search_focus_changed", False))
|
||||
self._artist_window.connect("artists_changed", self._on_artists_changed)
|
||||
self._settings.connect("notify::mini-player", self._on_mini_player)
|
||||
if not self._use_csd:
|
||||
|
@ -1778,9 +1778,6 @@ class Browser(Gtk.Paned):
|
|||
def save_settings(self):
|
||||
self._settings.set_int("paned1", self.get_position())
|
||||
|
||||
def search_started(self):
|
||||
return self._search_window.started()
|
||||
|
||||
def back_to_current_album(self, *args):
|
||||
def callback():
|
||||
try:
|
||||
|
@ -1817,7 +1814,7 @@ class Browser(Gtk.Paned):
|
|||
def _on_search_toggled(self, widget):
|
||||
if widget.get_active():
|
||||
self._stack.set_visible_child_name("search")
|
||||
self._search_window.start()
|
||||
self._search_window.search_entry.grab_focus()
|
||||
else:
|
||||
self._stack.set_visible_child_name("albums")
|
||||
|
||||
|
@ -3550,29 +3547,17 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||
dbus_service=MPRISInterface(self, self._client, self._settings)
|
||||
|
||||
# actions
|
||||
self._save_action=Gio.SimpleAction.new("save", None)
|
||||
self._save_action.connect("activate", self._on_save)
|
||||
self.add_action(self._save_action)
|
||||
|
||||
simple_actions_data=[
|
||||
"save","settings","stats","update","help",
|
||||
"show-lyrics","toggle-play","next","prev","back-to-current-album","seek-forward","seek-backward"
|
||||
]
|
||||
for name in simple_actions_data:
|
||||
action=Gio.SimpleAction.new(name, None)
|
||||
action.connect("activate", getattr(self, ("_on_"+name.replace("-","_"))))
|
||||
self.add_action(action)
|
||||
mini_player_action=Gio.PropertyAction.new("mini-player", self._settings, "mini-player")
|
||||
self.add_action(mini_player_action)
|
||||
|
||||
settings_action=Gio.SimpleAction.new("settings", None)
|
||||
settings_action.connect("activate", self._on_settings)
|
||||
self.add_action(settings_action)
|
||||
|
||||
self._stats_action=Gio.SimpleAction.new("stats", None)
|
||||
self._stats_action.connect("activate", self._on_stats)
|
||||
self.add_action(self._stats_action)
|
||||
|
||||
self._update_action=Gio.SimpleAction.new("update", None)
|
||||
self._update_action.connect("activate", self._on_update)
|
||||
self.add_action(self._update_action)
|
||||
|
||||
self._help_action=Gio.SimpleAction.new("help", None)
|
||||
self._help_action.connect("activate", self._on_help)
|
||||
self.add_action(self._help_action)
|
||||
|
||||
# widgets
|
||||
self._icons={}
|
||||
icons_data=["open-menu-symbolic"]
|
||||
|
@ -3622,11 +3607,7 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||
self._client.emitter.connect("current_song_changed", self._on_song_changed)
|
||||
self._client.emitter.connect("disconnected", self._on_disconnected)
|
||||
self._client.emitter.connect("reconnected", self._on_reconnected)
|
||||
# unmap space
|
||||
binding_set=Gtk.binding_set_find('GtkTreeView')
|
||||
Gtk.binding_entry_remove(binding_set, 32, Gdk.ModifierType.MOD2_MASK)
|
||||
# map space play/pause
|
||||
self.connect("key-press-event", self._on_key_press_event)
|
||||
self._browser.connect("search_focus_changed", self._on_search_focus_changed)
|
||||
|
||||
# packing
|
||||
self._paned2=Gtk.Paned()
|
||||
|
@ -3690,57 +3671,49 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||
|
||||
def _on_reconnected(self, *args):
|
||||
self._playback_control.set_sensitive(True)
|
||||
self._update_action.set_enabled(True)
|
||||
self._stats_action.set_enabled(True)
|
||||
self.action_enabled_changed
|
||||
self.lookup_action("update").set_enabled(True)
|
||||
self.lookup_action("stats").set_enabled(True)
|
||||
|
||||
def _on_disconnected(self, *args):
|
||||
self.set_title("mpdevil")
|
||||
if self._use_csd:
|
||||
self._header_bar.set_subtitle("")
|
||||
self._playback_control.set_sensitive(False)
|
||||
self._update_action.set_enabled(False)
|
||||
self._stats_action.set_enabled(False)
|
||||
self.lookup_action("update").set_enabled(False)
|
||||
self.lookup_action("stats").set_enabled(False)
|
||||
|
||||
def _on_key_press_event(self, widget, event):
|
||||
ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
|
||||
if ctrl:
|
||||
if event.keyval == 108: # ctrl + l
|
||||
self._cover_playlist_window.show_lyrics()
|
||||
def _on_search_focus_changed(self, obj, focus):
|
||||
if focus:
|
||||
self.lookup_action("toggle-play").set_enabled(False)
|
||||
else:
|
||||
if event.keyval == 32: # space
|
||||
if not self._browser.search_started():
|
||||
self._playback_control.play_button.grab_focus()
|
||||
elif event.keyval == 269025044: # AudioPlay
|
||||
self._playback_control.play_button.grab_focus()
|
||||
self._playback_control.play_button.emit("clicked")
|
||||
elif event.keyval == 269025047: # AudioNext
|
||||
self._playback_control.next_button.grab_focus()
|
||||
self._playback_control.next_button.emit("clicked")
|
||||
elif event.keyval == 43 or event.keyval == 65451: # +
|
||||
if not self._browser.search_started():
|
||||
self._playback_control.next_button.grab_focus()
|
||||
self._playback_control.next_button.emit("clicked")
|
||||
elif event.keyval == 269025046: # AudioPrev
|
||||
self._playback_control.prev_button.grab_focus()
|
||||
self._playback_control.prev_button.emit("clicked")
|
||||
elif event.keyval == 45 or event.keyval == 65453: # -
|
||||
if not self._browser.search_started():
|
||||
self._playback_control.prev_button.grab_focus()
|
||||
self._playback_control.prev_button.emit("clicked")
|
||||
elif event.keyval == 65307: # esc
|
||||
self._browser.back_to_current_album()
|
||||
elif event.keyval == 65450: # *
|
||||
if not self._browser.search_started():
|
||||
self._seek_bar.scale.grab_focus()
|
||||
self._seek_bar.seek_forward()
|
||||
elif event.keyval == 65455: # /
|
||||
if not self._browser.search_started():
|
||||
self._seek_bar.scale.grab_focus()
|
||||
self._seek_bar.seek_backward()
|
||||
elif event.keyval == 65474: # F5
|
||||
self._update_action.emit("activate", None)
|
||||
elif event.keyval == 65470: # F1
|
||||
self._help_action.emit("activate", None)
|
||||
self.lookup_action("toggle-play").set_enabled(True)
|
||||
|
||||
def _on_show_lyrics(self, action, param):
|
||||
self._cover_playlist_window.show_lyrics()
|
||||
|
||||
def _on_toggle_play(self, action, param):
|
||||
self._playback_control.play_button.grab_focus()
|
||||
self._playback_control.play_button.emit("clicked")
|
||||
|
||||
def _on_next(self, action, param):
|
||||
self._playback_control.next_button.grab_focus()
|
||||
self._playback_control.next_button.emit("clicked")
|
||||
|
||||
def _on_prev(self, action, param):
|
||||
self._playback_control.prev_button.grab_focus()
|
||||
self._playback_control.prev_button.emit("clicked")
|
||||
|
||||
def _on_back_to_current_album(self, action, param):
|
||||
self._browser.back_to_current_album()
|
||||
|
||||
def _on_seek_forward(self, action, param):
|
||||
self._seek_bar.scale.grab_focus()
|
||||
self._seek_bar.seek_forward()
|
||||
|
||||
def _on_seek_backward(self, action, param):
|
||||
self._seek_bar.scale.grab_focus()
|
||||
self._seek_bar.seek_backward()
|
||||
|
||||
def _on_save(self, action, param):
|
||||
size=self.get_size()
|
||||
|
@ -3770,12 +3743,14 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||
if obj.get_property("mini-player"):
|
||||
self._tmp_saved_size=self.get_size()
|
||||
self._tmp_saved_miximized=self.is_maximized()
|
||||
self._save_action.set_enabled(False)
|
||||
self.lookup_action("save").set_enabled(False)
|
||||
self.lookup_action("back-to-current-album").set_enabled(False)
|
||||
if self._tmp_saved_miximized:
|
||||
self.unmaximize()
|
||||
self.resize(1,1)
|
||||
else:
|
||||
self._save_action.set_enabled(True)
|
||||
self.lookup_action("save").set_enabled(True)
|
||||
self.lookup_action("back-to-current-album").set_enabled(True)
|
||||
self.resize(self._tmp_saved_size[0], self._tmp_saved_size[1])
|
||||
if self._tmp_saved_miximized:
|
||||
self.maximize()
|
||||
|
@ -3810,6 +3785,18 @@ class mpdevil(Gtk.Application):
|
|||
if not self._window: # allow just one instance
|
||||
self._window=MainWindow(self, self._client, self._settings)
|
||||
self._window.connect("delete-event", self._on_delete_event)
|
||||
# accelerators
|
||||
self.set_accels_for_action("app.quit", ["<Control>q"])
|
||||
self.set_accels_for_action("win.mini-player", ["<Control>m"])
|
||||
self.set_accels_for_action("win.update", ["F5"])
|
||||
self.set_accels_for_action("win.help", ["F1"])
|
||||
self.set_accels_for_action("win.show-lyrics", ["<Control>l"])
|
||||
self.set_accels_for_action("win.toggle-play", ["space"])
|
||||
self.set_accels_for_action("win.next", ["KP_Add"])
|
||||
self.set_accels_for_action("win.prev", ["KP_Subtract",])
|
||||
self.set_accels_for_action("win.seek-forward", ["KP_Multiply"])
|
||||
self.set_accels_for_action("win.seek-backward", ["KP_Divide"])
|
||||
self.set_accels_for_action("win.back-to-current-album", ["Escape"])
|
||||
self._window.present()
|
||||
|
||||
def do_startup(self):
|
||||
|
|
Loading…
Reference in New Issue
Block a user