2009-12-18 4 views
6

텍스트 항목을 포함하여 위젯이 포함 된 팝업 창이 있습니다 (WINDOW_POPUP 유형을 사용하여 생성 됨). 문제는 항목을 클릭 할 때 포커스가 표시되지 않으므로 아무 것도 입력 할 수 없다는 것입니다. 창에 키보드 포커스를 허용하도록 설정해야하는 플래그가 있습니까?팝업 Gtk.Window에 키보드 포커스를 부여하는 방법

답변

-1
#include <gtk/gtk.h> 

static gboolean delete_event(GtkWidget *widget, 
           GdkEvent *event, 
           gpointer data) 
{ 
    g_print ("delete event occurred\n"); 
    gtk_main_quit(); 
    return TRUE; 
} 

static void destroy(GtkWidget *widget, 
        gpointer data) 
{ 
    gtk_main_quit(); 
} 

int main(int argc, 
      char *argv[]) 
{ 
    GtkWidget *window; 
    GtkWidget *windowpopup; 
    GtkWidget *button; 

    gtk_init (&argc, &argv); 

    /* create a new window */ 
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    windowpopup = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_transient_for(GTK_WINDOW(windowpopup),GTK_WINDOW(window)); 
    gtk_window_set_destroy_with_parent(GTK_WINDOW(windowpopup),TRUE); 
    gtk_widget_show (windowpopup); 

    g_signal_connect (G_OBJECT (window), "delete_event", 
       G_CALLBACK (delete_event), NULL); 
    g_signal_connect (G_OBJECT (window), "destroy", 
       G_CALLBACK (destroy), NULL); 

    /* Creates a new button with the label "Hello World". */ 
    button = gtk_button_new_with_label ("Hello World"); 

    g_signal_connect_swapped (G_OBJECT (button), "clicked", 
        G_CALLBACK (gtk_widget_destroy), 
           G_OBJECT (window)); 

    gtk_container_add (GTK_CONTAINER (window), button); 

    gtk_widget_show (button); 
    gtk_widget_show (window); 

    gtk_main(); 

    return 0; 
} 
4

포커스가 필요한 gtk-windows에는 WINDOW_POPUP을 사용할 수 없습니다. 이 '팝업'이

을 파괴 할 때 대신 당신이 나를 위해 일한 다음 기능 (또는 방법)

GtkWindow *result = g_object_new(GTK_TYPE_WINDOW, "type", GTK_WINDOW_TOPLEVEL, NULL); 
gtk_widget_set_can_focus(result, TRUE); 
gtk_window_set_decorated(GTK_WINDOW(result), FALSE); 
gtk_window_set_type_hint(GTK_WINDOW(result), GDK_WINDOW_TYPE_HINT_POPUP_MENU); 
gtk_window_set_transient_for(GTK_WINDOW(result), main_top_level_window); 

을 형 GTK_WINDOW_TOPLEVEL와 GtkWindow를 사용하여 호출해야 ... 창 목록에서 불행하게도 아이콘이 짧은 깜박

1

이전 답변과 GTK 참조에도 불구하고 GTK_WINDOW_POPUP을 사용할 때 키보드 포커스를 잡는 것이 가능합니다. 당신은 키보드를 잡아하려고 콜백으로 ...

GtkWindow *w = gtk_window_new(GTK_WINDOW_POPUP); 
g_signal_connect(G_OBJECT(w), "show", G_CALLBACK(on_window_show), NULL); 

... "연락처보기"이벤트에 연결해야합니다 꽤 잘 나를 위해 작동

static void on_window_show(GtkWidget *w, gpointer user_data) { 
    /* grabbing might not succeed immediately... */ 
    while (gdk_keyboard_grab(w->window, FALSE, GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) { 
     /* ...wait a while and try again */ 
     sleep(0.1); 
    } 
} 

.

+0

이렇게하면 키보드를 독점적으로 잡을 수 있습니다. 마우스로 다른 프로그램의 창을 클릭해도 키보드 초점이 이동되지 않습니다. 해결 방법이있을 수 있지만 어떤 것도 알지 못합니다. –

관련 문제