GTK: intercept the Tab key and run MNU_SHOW_TEXT_WND.
This commit is contained in:
parent
b62375b554
commit
f3e36f593b
|
@ -513,10 +513,6 @@ public:
|
||||||
set_double_buffered(true);
|
set_double_buffered(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void emulate_key_press(GdkEventKey *event) {
|
|
||||||
on_key_press_event(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool on_configure_event(GdkEventConfigure *event) {
|
virtual bool on_configure_event(GdkEventConfigure *event) {
|
||||||
_w = event->width;
|
_w = event->width;
|
||||||
|
@ -596,45 +592,6 @@ protected:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool on_key_press_event(GdkEventKey *event) {
|
|
||||||
int chr;
|
|
||||||
|
|
||||||
switch(event->keyval) {
|
|
||||||
case GDK_KEY_Escape:
|
|
||||||
chr = GraphicsWindow::ESCAPE_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_KEY_Delete:
|
|
||||||
chr = GraphicsWindow::DELETE_KEY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_KEY_Tab:
|
|
||||||
chr = '\t';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_KEY_BackSpace:
|
|
||||||
case GDK_KEY_Back:
|
|
||||||
chr = '\b';
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if(event->keyval >= GDK_KEY_F1 && event->keyval <= GDK_KEY_F12)
|
|
||||||
chr = GraphicsWindow::FUNCTION_KEY_BASE + (event->keyval - GDK_KEY_F1);
|
|
||||||
else
|
|
||||||
chr = gdk_keyval_to_unicode(event->keyval);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(event->state & GDK_SHIFT_MASK)
|
|
||||||
chr |= GraphicsWindow::SHIFT_MASK;
|
|
||||||
if(event->state & GDK_CONTROL_MASK)
|
|
||||||
chr |= GraphicsWindow::CTRL_MASK;
|
|
||||||
|
|
||||||
if(chr && SS.GW.KeyDown(chr))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _w, _h;
|
int _w, _h;
|
||||||
void ij_to_xy(int i, int j, int &x, int &y) {
|
void ij_to_xy(int i, int j, int &x, int &y) {
|
||||||
|
@ -675,6 +632,10 @@ public:
|
||||||
return _is_fullscreen;
|
return _is_fullscreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool emulate_key_press(GdkEventKey *event) {
|
||||||
|
return on_key_press_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void on_show() {
|
virtual void on_show() {
|
||||||
Gtk::Window::on_show();
|
Gtk::Window::on_show();
|
||||||
|
@ -705,6 +666,55 @@ protected:
|
||||||
return Gtk::Window::on_window_state_event(event);
|
return Gtk::Window::on_window_state_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool on_key_press_event(GdkEventKey *event) {
|
||||||
|
int chr;
|
||||||
|
|
||||||
|
switch(event->keyval) {
|
||||||
|
case GDK_KEY_Escape:
|
||||||
|
chr = GraphicsWindow::ESCAPE_KEY;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_KEY_Delete:
|
||||||
|
chr = GraphicsWindow::DELETE_KEY;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_KEY_Tab:
|
||||||
|
chr = '\t';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_KEY_BackSpace:
|
||||||
|
case GDK_KEY_Back:
|
||||||
|
chr = '\b';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if(event->keyval >= GDK_KEY_F1 && event->keyval <= GDK_KEY_F12) {
|
||||||
|
chr = GraphicsWindow::FUNCTION_KEY_BASE + (event->keyval - GDK_KEY_F1);
|
||||||
|
} else {
|
||||||
|
chr = gdk_keyval_to_unicode(event->keyval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event->state & GDK_SHIFT_MASK){
|
||||||
|
chr |= GraphicsWindow::SHIFT_MASK;
|
||||||
|
}
|
||||||
|
if(event->state & GDK_CONTROL_MASK) {
|
||||||
|
chr |= GraphicsWindow::CTRL_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(chr && SS.GW.KeyDown(chr)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(chr == '\t') {
|
||||||
|
// Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=123994.
|
||||||
|
GraphicsWindow::MenuView(GraphicsWindow::MNU_SHOW_TEXT_WND);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Gtk::Window::on_key_press_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
virtual void on_editing_done(Glib::ustring value) {
|
virtual void on_editing_done(Glib::ustring value) {
|
||||||
SS.GW.EditControlDone(value.c_str());
|
SS.GW.EditControlDone(value.c_str());
|
||||||
}
|
}
|
||||||
|
@ -900,6 +910,10 @@ public:
|
||||||
accel_key = GDK_KEY_Escape;
|
accel_key = GDK_KEY_Escape;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '\t':
|
||||||
|
accel_key = GDK_KEY_Tab;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
accel_key = _entry.accel & ~(GraphicsWindow::SHIFT_MASK | GraphicsWindow::CTRL_MASK);
|
accel_key = _entry.accel & ~(GraphicsWindow::SHIFT_MASK | GraphicsWindow::CTRL_MASK);
|
||||||
if(accel_key > GraphicsWindow::FUNCTION_KEY_BASE &&
|
if(accel_key > GraphicsWindow::FUNCTION_KEY_BASE &&
|
||||||
|
@ -1391,6 +1405,14 @@ protected:
|
||||||
return _widget.event((GdkEvent*) event);
|
return _widget.event((GdkEvent*) event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool on_key_press_event(GdkEventKey *event) {
|
||||||
|
if(GW->emulate_key_press(event)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Gtk::Window::on_key_press_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Gtk::VScrollbar _scrollbar;
|
Gtk::VScrollbar _scrollbar;
|
||||||
TextWidget _widget;
|
TextWidget _widget;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user