ocarina: Reenable some keyboard shortcuts

I have to track if a filter-text entry has focus to do this properly,
otherwise using a shortcut key while searching a playlist will trigger
that shortcut.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-09-01 09:48:11 -04:00
parent c026686a1b
commit 55431421bf
3 changed files with 31 additions and 8 deletions

View File

@ -29,6 +29,7 @@ string run_chooser(const string &);
void init_window();
/* playlist.cpp */
bool playlist_entry_focused();
void update_playlist(notify_t, libsaria::PlaylistNotification *);
void init_playlist();

View File

@ -22,6 +22,7 @@ struct PlaylistWidgets {
PlaylistWidgets library_widgets;
PlaylistWidgets recent_widgets;
PlaylistWidgets banned_widgets;
static GtkWidget *focused_entry = NULL;
static gboolean is_visible(GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
@ -39,6 +40,20 @@ static void do_filter(GtkWidget *entry, gpointer d)
plist->set_filter_text(text);
}
static gboolean on_focus_change(GtkWidget *entry, GdkEvent *event, gpointer data)
{
if (gtk_widget_is_focus(entry))
focused_entry = entry;
return FALSE;
}
bool playlist_entry_focused()
{
if (!focused_entry)
return false;
return gtk_widget_is_focus(focused_entry);
}
static void track_selected(GtkWidget *treeview, GtkTreePath *path,
GtkTreeViewColumn *col, gpointer data)
{
@ -211,6 +226,7 @@ static void init_playlist_tab(struct PlaylistWidgets *widgets,
connect_signal(view_name, "row-activated", G_CALLBACK(track_selected), NULL);
connect_signal(entry_name, "changed", G_CALLBACK(do_filter), playlist);
connect_signal(entry_name, "focus-in-event", G_CALLBACK(on_focus_change), NULL);
}
static void on_switch_page(GtkNotebook *tabs, gpointer page,

View File

@ -52,22 +52,27 @@ static void window_state(GtkWidget *widget, GdkEvent *event, gpointer data)
}
}
/*static gboolean key_pressed(GtkWidget *widget, GdkEvent *event, gpointer data)
static gboolean key_pressed(GtkWidget *widget, GdkEvent *event, gpointer data)
{
string key = gdk_keyval_name(event->key.keyval);
GtkWidget *focus = gtk_window_get_focus(GTK_WINDOW(win));
if (!(focus == NULL || focus == win))
if (key == "Escape") {
gtk_window_set_focus(GTK_WINDOW(widget), NULL);
return TRUE;
}
if (playlist_entry_focused())
return FALSE;
println("Window handling key press (1): " + key);
println("Window handling key press: " + key);
if (key == "l" || key == "L")
/*if (key == "l" || key == "L")
ocarina::playlist::switch_to_library();
else if (key == "r" || key == "R")
ocarina::playlist::switch_to_recent();
else if (key == "b" || key == "B")
ocarina::playlist::switch_to_banned();
else if (key == "n")
ocarina::playlist::switch_to_banned();*/
//else if (key == "n")
if (key == "n")
libsaria::deck::next();
else if (key == "N")
libsaria::deck::prev();
@ -76,7 +81,7 @@ static void window_state(GtkWidget *widget, GdkEvent *event, gpointer data)
else
return FALSE;
return TRUE;
}*/
}
/*static gboolean key_pressed_after(GtkWidget *widget, GdkEvent *event, gpointer data)
{
@ -145,4 +150,5 @@ void init_window()
connect_signal("MainWindow", "destroy", gtk_main_quit, NULL);
connect_signal("MainWindow", "configure-event", G_CALLBACK(configure), NULL);
connect_signal("MainWindow", "window-state-event", G_CALLBACK(window_state), NULL);
connect_signal("MainWindow", "key-press-event", G_CALLBACK(key_pressed), NULL);
}