gui/window: Move keyboard shortcut handling into tabs.cpp

I handle the Escape key through gtkbuilder, so let's move the
tab-changing keys into the tabs source file.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-12-26 11:31:57 -05:00
parent 70dca79b41
commit 066d27a240
4 changed files with 37 additions and 38 deletions

View File

@ -434,8 +434,39 @@ static void init_menu_item(const std::string &pq, unsigned int n)
sigc::bind<unsigned int> (sigc::ptr_fun(on_add_to_queue), n));
}
static bool on_window_key_pressed(GdkEventKey *event)
{
Gtk::Notebook *notebook = Glib :: wrap(GTK_NOTEBOOK(gui_builder_widget("o_notebook")), false);
std::string key = gdk_keyval_name(event->keyval);
if (key.size() >= 3) {
if (key.substr(0, 3) == "KP_")
key = key.substr(3);
}
if (key == "slash")
tab_focus_search();
else if (key >= "0" && key <= "9") {
unsigned int n = atoi(key.c_str());
if (n < tempq_count())
notebook->set_current_page(n);
} else if (key == "c")
notebook->set_current_page(tempq_count());
else if (key == "h")
notebook->set_current_page(tempq_count() + 1);
else if (key == "m")
notebook->set_current_page(tempq_count() + 3);
else if (key == "p")
notebook->set_current_page(tempq_count() + 2);
else
return false;
return true;
}
void init_tabs()
{
Gtk::Window *window = Glib :: wrap(GTK_WINDOW(gui_builder_widget("o_window")), false);
/* Notebook signals */
struct Gtk::Notebook *notebook = Glib :: wrap(GTK_NOTEBOOK(gui_builder_widget("o_notebook")), false);
notebook->signal_switch_page().connect(sigc::ptr_fun(on_switch_page));
@ -458,6 +489,9 @@ void init_tabs()
init_history_tab();
init_collection_tab();
init_queue_tabs();
/* Setup keyboard shortcuts */
window->signal_key_press_event().connect(sigc::ptr_fun(on_window_key_pressed));
}
void post_init_tabs()

View File

@ -12,47 +12,12 @@ extern "C" {
const std::string appname = "Ocarina ";
static bool on_window_key_pressed(GdkEventKey *event)
{
Gtk::Notebook *notebook = Glib :: wrap(GTK_NOTEBOOK(gui_builder_widget("o_notebook")), false);
Gtk::Window *window = Glib :: wrap(GTK_WINDOW(gui_builder_widget("o_window")), false);
std::string key = gdk_keyval_name(event->keyval);
if (key.size() >= 3) {
if (key.substr(0, 3) == "KP_")
key = key.substr(3);
}
if (key == "Escape")
window->set_focus(*window);
else if (key == "slash")
tab_focus_search();
else if (key >= "0" && key <= "9") {
unsigned int n = atoi(key.c_str());
if (n < tempq_count())
notebook->set_current_page(n);
} else if (key == "c")
notebook->set_current_page(tempq_count());
else if (key == "h")
notebook->set_current_page(tempq_count() + 1);
else if (key == "m")
notebook->set_current_page(tempq_count() + 3);
else if (key == "p")
notebook->set_current_page(tempq_count() + 2);
else
return false;
return true;
}
Gtk::Window *window_init()
{
Gtk::Window *window = Glib :: wrap(GTK_WINDOW(gui_builder_widget("o_window")), false);
window->set_can_focus();
window->set_title(appname + get_version());
window->set_icon_from_file(gui :: share_file("ocarina.png"));
window->signal_key_press_event().connect(sigc::ptr_fun(on_window_key_pressed));
return window;
}

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<!-- Generated with glade 3.19.0 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkBox" id="QueueToolbar">
@ -26,7 +26,6 @@
<object class="GtkSwitch" id="q_switch">
<property name="can_focus">True</property>
<property name="active">True</property>
<property name="state">True</property>
</object>
<packing>
<property name="expand">False</property>

View File

@ -212,7 +212,7 @@
</object>
<object class="GtkWindow" id="o_window">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can_focus">True</property>
<property name="title" translatable="yes">Ocarina 6.1.3</property>
<property name="default_width">1024</property>
<property name="default_height">683</property>
@ -1011,5 +1011,6 @@ Manager</property>
</child>
</object>
</child>
<accelerator key="Escape" signal="grab-focus"/>
</object>
</interface>