Browse Source

Implemented use of command-arrow keys on OS X.

merge-requests/365/head
eidheim 11 years ago
parent
commit
44ce183a25
  1. 6
      juci/notebook.cc
  2. 49
      juci/window.cc
  3. 5
      juci/window.h

6
juci/notebook.cc

@ -59,10 +59,8 @@ void Notebook::Controller::CreateKeybindings() {
auto widget=window->get_focus(); auto widget=window->get_focus();
if(auto entry=dynamic_cast<Gtk::Entry*>(widget)) if(auto entry=dynamic_cast<Gtk::Entry*>(widget))
entry->copy_clipboard(); entry->copy_clipboard();
else { else if(auto text_view=dynamic_cast<Gtk::TextView*>(widget))
if (Pages() != 0) text_view->get_buffer()->copy_clipboard(clipboard);
CurrentSourceView()->get_buffer()->copy_clipboard(clipboard);
}
}); });
menu->action_group->add(Gtk::Action::create("EditCut", "Cut"), Gtk::AccelKey(menu->key_map["edit_cut"]), [this]() { menu->action_group->add(Gtk::Action::create("EditCut", "Cut"), Gtk::AccelKey(menu->key_map["edit_cut"]), [this]() {
auto window=(Gtk::Window*)view.get_toplevel(); auto window=(Gtk::Window*)view.get_toplevel();

49
juci/window.cc

@ -80,11 +80,6 @@ Window::Window() :
window_box_.pack_end(paned_); window_box_.pack_end(paned_);
show_all_children(); show_all_children();
signal_key_press_event().connect([this](GdkEventKey* key) {
if(key->keyval==GDK_KEY_Escape)
Singleton::notebook()->entry_box.hide();
return false;
});
Singleton::notebook()->entry_box.signal_show().connect([this](){ Singleton::notebook()->entry_box.signal_show().connect([this](){
std::vector<Gtk::Widget*> focus_chain; std::vector<Gtk::Widget*> focus_chain;
focus_chain.emplace_back(&Singleton::notebook()->entry_box); focus_chain.emplace_back(&Singleton::notebook()->entry_box);
@ -97,6 +92,50 @@ Window::Window() :
INFO("Window created"); INFO("Window created");
} // Window constructor } // Window constructor
bool Window::on_key_press_event(GdkEventKey *event) {
if(event->keyval==GDK_KEY_Escape) {
Singleton::notebook()->entry_box.hide();
return true;
}
#ifdef __APPLE__ //For Apple's Command-left, right, up, down keys
if((event->state & GDK_META_MASK)>0) {
if(event->keyval==GDK_KEY_Left) {
event->keyval=GDK_KEY_Home;
event->state=event->state & GDK_SHIFT_MASK;
event->hardware_keycode=115;
}
else if(event->keyval==GDK_KEY_Right) {
event->keyval=GDK_KEY_End;
event->state=event->state & GDK_SHIFT_MASK;
event->hardware_keycode=119;
}
else if(event->keyval==GDK_KEY_Up) {
if(auto text_view=dynamic_cast<Gtk::TextView*>(get_focus())) {
if(event->state & GDK_SHIFT_MASK)
text_view->get_buffer()->select_range(text_view->get_buffer()->begin(), text_view->get_buffer()->get_insert()->get_iter());
else
text_view->get_buffer()->place_cursor(text_view->get_buffer()->begin());
text_view->scroll_to(text_view->get_buffer()->get_insert());
}
return true;
}
else if(event->keyval==GDK_KEY_Down) {
if(auto text_view=dynamic_cast<Gtk::TextView*>(get_focus())) {
if(event->state & GDK_SHIFT_MASK)
text_view->get_buffer()->select_range(text_view->get_buffer()->end(), text_view->get_buffer()->get_insert()->get_iter());
else
text_view->get_buffer()->place_cursor(text_view->get_buffer()->end());
text_view->scroll_to(text_view->get_buffer()->get_insert());
}
return true;
}
}
#endif
return Gtk::Window::on_key_press_event(event);
}
void Window::OnWindowHide() { void Window::OnWindowHide() {
auto size=Singleton::notebook()->source_views.size(); auto size=Singleton::notebook()->source_views.size();
for(size_t c=0;c<size;c++) for(size_t c=0;c<size;c++)

5
juci/window.h

@ -15,8 +15,9 @@ public:
MainConfig main_config; MainConfig main_config;
PluginApi api; PluginApi api;
protected:
private: bool on_key_press_event(GdkEventKey *event);
private:
std::mutex running; std::mutex running;
Gtk::VPaned paned_; Gtk::VPaned paned_;
//signal handlers //signal handlers

Loading…
Cancel
Save