2015-07-09 3 views
0

Я использую gtk-3.0 для создания моего простого пользовательского интерфейса, и я хочу отправить фальшивое событие в GTKEntry через g_signal_emit (...). На самом деле, я не знаю, какие параметры я должен передать этой функции.отправка фальшивого события в GTKEntry

+0

Вы должны предоставить немного больше деталей в вашем вопросе - ответ на этот вопрос зависит от того, какой сигнал вы пытаетесь излучать. – ptomato

ответ

1

Источник: https://mail.gnome.org/archives/gtkmm-list/2007-June/msg00115.html

void Foo:bar() // handler for signal_clicked() 
{ 
     <YOUR TREEVIEW>.grab_focus(); // essential 

     guint keyval = GDK_Page_Down; 

     GdkKeymapKey* keys; 
     gint n_keys; 
     gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), 
              keyval, 
              &keys, 
              &n_keys); 
    // Note: GdkEvent is an union 
     GdkEvent* event = gdk_event_new(GDK_KEY_PRESS); 
     ((GdkEventKey*)event)->window = 
          <YOUR TREEVIEW>get_window()->gobj(); 
     ((GdkEventKey*)event)->send_event = TRUE; 
     ((GdkEventKey*)event)->time = GDK_CURRENT_TIME; 
     ((GdkEventKey*)event)->state = GDK_KEY_PRESS_MASK; 
     ((GdkEventKey*)event)->keyval = keyval; 
     ((GdkEventKey*)event)->hardware_keycode = keys[0].keycode; 
     ((GdkEventKey*)event)->group = keys[0].group; 

     gdk_event_put(event); 
//  Or, more gdkmm-ish: 
//  Gdk::Event(event).put(); 
}