2013-05-13 77 views
1

我試圖使用雜亂-gtk。我寫了一小段代碼,創建一個gtk窗口,裏面有一個雜亂的舞臺。我嘗試在舞臺上獲得鼠標按鈕按下事件,但沒有任何東西。gtk中的雜亂舞臺不能處理舞臺鼠標按下事件

下面是代碼:當我點擊舞臺

#include <clutter/clutter.h> 
#include <clutter-gtk/clutter-gtk.h> 
#include <glib.h> 
#include <stdlib.h> 
#include <stdio.h> 
/*gcc 3_clutter_app_clickable_text_in_gtk.c -o 3_clutter_app_clickable_text_in_gtk `pkg-config clutter-1.0 clutter-gtk-1.0 glib --cflags --libs`*/ 

/*mouse clic handler*/ 
void on_stage_button_press(ClutterStage *stage, ClutterEvent *event, gpointer data) 
{ 
    printf("ok\n"); 
} 


int main(int argc, char *argv[]) 
{ 
    if (gtk_clutter_init(&argc, &argv) != CLUTTER_INIT_SUCCESS) 
    return EXIT_FAILURE; 

    /*create the window*/ 
    GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_default_size (GTK_WINDOW (window), 640, 480); 

    /*destroy from window close all*/ 
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);  
    /*vertical box, 0 spacing*/ 
    GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); 
    /*add box in the window*/ 
    gtk_container_add(GTK_CONTAINER(window), box); 

    /*create the cutter widget*/ 
    GtkWidget *clutter_widget = gtk_clutter_embed_new(); 
    gtk_widget_set_size_request (clutter_widget, 200, 200); 

    ClutterActor *stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED(clutter_widget)); 
    clutter_stage_set_use_alpha(CLUTTER_STAGE(stage), TRUE); 
    ClutterColor stage_color ; 
    GString * bg_color = g_string_new("#555753ff"); 
    clutter_color_from_string(&stage_color,bg_color->str); 
    clutter_actor_set_background_color(stage, &stage_color); 

    /*add the cutter widget in the box expand and fill are TRUE and spacing is 0*/ 
    gtk_box_pack_start (GTK_BOX (box), clutter_widget, TRUE, TRUE, 0); 

    /*create line text*/ 
    ClutterColor text_color; 
    GString * fg_color = g_string_new("#00000055"); 
    clutter_color_from_string(&text_color, fg_color->str); 
    ClutterActor *some_text = clutter_text_new_full("Sans 24", "Hello, world", &text_color); 
    clutter_actor_set_size(some_text, 256, 128); 
    clutter_actor_set_position(some_text, 128, 128); 
    clutter_actor_add_child(CLUTTER_ACTOR(stage), some_text); 
    clutter_text_set_editable(CLUTTER_TEXT(some_text), TRUE);  
    /*define clic event*/ 
    g_signal_connect(stage, "button-press-event", G_CALLBACK(on_stage_button_press), NULL); 

    /* Show the window and all its widgets: */ 
    gtk_widget_show_all (GTK_WIDGET (window)); 

    /* Start the main loop, so we can respond to events: */ 
    gtk_main(); 

    return EXIT_SUCCESS; 
} 

什麼也沒有發生。我做了一些測試,我可以在主窗口上處理clutter_widget上的click事件,但不能直接在雜亂的舞臺上處理。

此代碼從http://www.openismus.com/documents/clutter_tutorial/0.9/docs/tutorial/html/sec-stage-widget.html修改一個。在這篇文章中,作者直接在舞臺上連接信號,但這個例子是針對雜波0.9的,並且當雜波v> 1.0時不再編譯。

關於我在做什麼的錯誤?

編輯

我已經取得了一些測試與「按鍵事件」,它的處理方式。所以這個問題似乎來自舞臺的事件面具。

有沒有人知道如何改變舞臺的事件掩碼以強制舞臺對鼠標事件作出反應?

回答

0

CLUTTER_BACKEND = gdk ./yourexecutable