2011-09-09 13 views
1

は、私は同じコードをコンパイル私はgtk3.thenをインストールubuntu.Inのubuntu11.04にgtk2.0してコンパイルされた簡単なプログラムを持って、私はちょうどコメントを次の行にgtk3でgtk2.0プログラムをコンパイルするには?

/* Add a timer callback to update the value of the progress bar */ 
timer = gtk_timeout_add (100, progress_timeout, pdata); 

をエラーを得ました私は出力ファイルを取得しました。しかし、それはコメント行なしで正常に動作していません。 gtk2.0で

私は、次のコマンドで

gcc progressbar.c `pkg-config --cflags --libs gtk+-2.0` 

をコンパイルし、gtk3

gcc progressbar.c `pkg-config --cflags --libs gtk+-3.0` 

に私はgtk3.pleaseでそのメソッドのいずれかの非推奨私を与えるがある、という疑問を持っています2と3の主な違いは何ですか? 完全なソースコードは、次のとおりです。

#include <gtk/gtk.h> 

typedef struct _ProgressData { 
GtkWidget *pbar; 
} ProgressData; 

gint progress_timeout(gpointer data) 
{ 
    ProgressData *pdata = (ProgressData *)data; 
    gdouble new_val; 
    new_val = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (pdata->pbar)) + 0.01; 

    if (new_val > 1.0) 
new_val = 0.0; 

    gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pdata->pbar), new_val); 

    return TRUE; 
} 


int main(int argc, 
     char *argv[]) 
{ 
ProgressData *pdata; 
GtkWidget *align; 
GtkWidget *window; 

int timer; 

GtkWidget *vbox; 

gtk_init (&argc, &argv); 

/* Allocate memory for the data that is passed to the callbacks */ 
pdata = g_malloc (sizeof (ProgressData)); 

window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
gtk_window_set_resizable (GTK_WINDOW (window), TRUE); 

    g_signal_connect (window, "destroy", gtk_main_quit, NULL) ; 

gtk_window_set_title (GTK_WINDOW (window), "GtkProgressBar"); 
gtk_container_set_border_width (GTK_CONTAINER (window), 0); 

vbox = gtk_vbox_new (FALSE, 5); 
gtk_container_set_border_width (GTK_CONTAINER (vbox), 10); 
gtk_container_add (GTK_CONTAINER (window), vbox); 
gtk_widget_show (vbox); 

/* Create a centering alignment object */ 
align = gtk_alignment_new (0.5, 0.5, 0, 0); 
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 5); 
gtk_widget_show (align); 

/* Create the GtkProgressBar */ 
pdata->pbar = gtk_progress_bar_new(); 

gtk_container_add (GTK_CONTAINER (align), pdata->pbar); 
gtk_widget_show (pdata->pbar); 

/* Add a timer callback to update the value of the progress bar */ 
timer = gtk_timeout_add (100, progress_timeout, pdata); 


gtk_widget_show (window); 

gtk_main(); 

return 0; 
} 

答えて

4

gtk_timeout_addコールをg_timeout_addに変更する必要があります。

gtk_timeout_add()

guint    gtk_timeout_add      (guint32 interval, 
                 GtkFunction function, 
                 gpointer data); 

Warning 

gtk_timeout_add has been deprecated since version 2.4 and should not be used in 
newly-written code. Use g_timeout_add() instead. 

Googleは、例えば、あなたの例を取得します "g_timeout_add gtk_timeout_add"これは、http://gna.org/patch/?2563です。

+0

ありがとう –

4

jesseがあなたに言ったように、gtk_timeout_addを使用していますが、これはGTK2では廃止されました。 GTK2で廃止されたすべてのシンボルはGTK3で削除されました。

あなたのプログラムをGTK3で動作させるには、GTK2が推奨されていないシンボルを使用していないことを確認する必要があります。このため、use symbols like G_DISABLE_DEPRECATED (for GLib), GTK_DISABLE_DEPRECATEDなどはGTK3で削除されたシンボルを使用していないことをGTK2でコンパイルする際に役立ちます。

また、使用だけでなく、GLibGTKシンボルのために、同じタスクを達成するためにGNOMEで使用されたパッチへのリンクをいくつかのGNOMEの目標ができGTK2 to GTK3 migration guideがあります。

関連する問題