void get_icon_path(char *iconame, char fname[]) { char uu[128]; sprintf(uu, "icons/%s", iconame); if (!get_hime_user_fname(uu, fname)) { sys_icon_fname(iconame, fname); } }
void gcb_main() { GtkWidget *hbox,*vbox; int i; #if 1 if (gcb_enabled==old_gcb_enabled && gcb_position==old_gcb_position && gcb_position_x==old_gcb_position_x && gcb_position_y==old_gcb_position_y) return; #endif old_gcb_enabled = gcb_enabled; old_gcb_position = gcb_position; old_gcb_position_x = gcb_position_x; old_gcb_position_y = gcb_position_y; if (mainwin) { gtk_widget_destroy(mainwin); mainwin = NULL; } #if 0 if (button_bar_tips) gtk_widget_destroy(button_bar_tips); #endif if (hist_window) { gtk_widget_destroy(hist_window); hist_window = NULL; } if (!gcb_enabled) return; // printf("gcb_position:%d\n", gcb_position); static char geo[][2]={{0,0},{'+','-'},{'+','+'},{'-','-'},{'-','+'}}; g_free(geomstr); geomstr = g_strdup_printf("%c%d%c%d", geo[gcb_position][0], gcb_position_x, geo[gcb_position][1], gcb_position_y); dbg("geomstr %s\n", geomstr); if (!buttonArr) { buttonArr=(GtkWidget**)g_malloc(gcb_button_n * sizeof(GtkWidget *)); buttonStr=(gchar**)g_malloc0(gcb_button_n * sizeof(gchar *)); } if (!hist_strArr) { hist_strArr=(gchar**)g_malloc0(gcb_history_n * sizeof(gchar *)); hist_buttonArr=(GtkWidget**)g_malloc(gcb_history_n * sizeof(GtkWidget *)); } mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_has_resize_grip(GTK_WINDOW(mainwin), FALSE); gtk_window_set_decorated(GTK_WINDOW(mainwin),FALSE); gtk_window_set_focus_on_map (GTK_WINDOW(mainwin), FALSE); hist_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_has_resize_grip(GTK_WINDOW(hist_window), FALSE); char icon_path[40]; sys_icon_fname("gcb.png", icon_path); GtkWidget *win_icon=gtk_image_new_from_file(icon_path); gtk_window_set_icon(GTK_WINDOW(mainwin), gtk_image_get_pixbuf(GTK_IMAGE(win_icon))); gtk_window_set_icon(GTK_WINDOW(hist_window), gtk_image_get_pixbuf(GTK_IMAGE(win_icon))); // Under gnome 2.0, the mainwin is not fixed if decorated, annoying gtk_window_set_decorated(GTK_WINDOW(hist_window),FALSE); gtk_window_set_skip_pager_hint(GTK_WINDOW(hist_window),TRUE); gtk_window_set_skip_taskbar_hint(GTK_WINDOW(hist_window),TRUE); gtk_window_set_title (GTK_WINDOW (hist_window),"gcb history"); gtk_window_set_title (GTK_WINDOW(mainwin), "gcb: gtk copy-paste buffer"); gtk_window_stick(GTK_WINDOW(mainwin)); // g_signal_connect(G_OBJECT (mainwin),"destroy", G_CALLBACK (do_exit), NULL); g_signal_connect(G_OBJECT (hist_window),"delete_event", G_CALLBACK (delete_hist_win), NULL); g_signal_connect(G_OBJECT (hist_window),"focus-out-event", G_CALLBACK (hist_focus_out_callback), NULL); #if !GTK_CHECK_VERSION(2,12,0) button_bar_tips = gtk_tooltips_new (); #endif hbox = gtk_hbox_new (FALSE, 1); gtk_container_add (GTK_CONTAINER(mainwin), hbox); gtk_window_parse_geometry(GTK_WINDOW(mainwin),geomstr); for(i=0;i<gcb_button_n;i++) { buttonArr[i] = gtk_button_new_with_label ("---"); // gtk_container_set_border_width(GTK_CONTAINER(buttonArr[i]),0); gtk_box_pack_start (GTK_BOX(hbox), buttonArr[i], TRUE, TRUE, FALSE); gtk_widget_show (buttonArr[i]); g_signal_connect (G_OBJECT (buttonArr[i]), "button-press-event", G_CALLBACK (get_mouse_button), (gpointer) buttonArr[i]); #if 0 g_signal_connect (G_OBJECT (buttonArr[i]), "key-press-event", G_CALLBACK (key_press_event), NULL); #endif #if 1 g_signal_connect (G_OBJECT (buttonArr[i]), "scroll-event", G_CALLBACK (gcb_button_scroll_event), NULL); #endif } vbox = gtk_vbox_new (FALSE, 1); gtk_orientable_set_orientation(GTK_ORIENTABLE(vbox), GTK_ORIENTATION_VERTICAL); gtk_container_add (GTK_CONTAINER(hist_window), vbox); for(i=0;i<gcb_history_n;i++) { hist_buttonArr[i] = gtk_button_new_with_label ("---"); gtk_container_set_border_width(GTK_CONTAINER(hist_buttonArr[i]),0); gtk_box_pack_start (GTK_BOX(vbox), hist_buttonArr[i], TRUE, TRUE, FALSE); gtk_widget_show (hist_buttonArr[i]); g_signal_connect (G_OBJECT (hist_buttonArr[i]), "button-press-event", G_CALLBACK (hist_get_mouse_button), (gpointer) hist_buttonArr[i]); #if 1 g_signal_connect (G_OBJECT (hist_buttonArr[i]), "key-press-event", G_CALLBACK (hist_key_press_event), NULL); #endif } #if 1 // need this because on win32 scoll is not recieved if win is not focused. gtk_box_pack_start (GTK_BOX (hbox), gtk_vseparator_new(), FALSE, FALSE, 0); GtkWidget *eve_arrow = gtk_event_box_new(); gtk_event_box_set_visible_window (GTK_EVENT_BOX(eve_arrow), FALSE); gtk_box_pack_start (GTK_BOX(hbox), eve_arrow, FALSE, FALSE, FALSE); g_signal_connect(G_OBJECT(eve_arrow),"button-press-event", G_CALLBACK(mouse_button_callback), NULL); gtk_container_add(GTK_CONTAINER(eve_arrow), gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_IN)); #endif gtk_widget_show_all(hbox); gtk_widget_show (vbox); gtk_widget_show (mainwin); pclipboard_prim = gtk_clipboard_get(GDK_SELECTION_PRIMARY); pclipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); set_snoop_button(buttonArr[0]); get_selection(pclipboard); get_selection(pclipboard_prim); gtk_container_set_border_width(GTK_CONTAINER(hbox),0); gtk_container_set_border_width(GTK_CONTAINER(mainwin),0); gtk_window_parse_geometry(GTK_WINDOW(mainwin),geomstr); #if GTK_CHECK_VERSION(2,6,0) g_signal_connect(pclipboard, "owner-change", G_CALLBACK (cb_owner_change), NULL); g_signal_connect(pclipboard_prim, "owner-change", G_CALLBACK (cb_owner_change), NULL); #endif }
void create_about_window() { if (about_window) { gtk_window_present(GTK_WINDOW(about_window)); return; } GtkWidget *vbox = gtk_vbox_new(FALSE,3); GtkWidget *hbox; /* Create a new about_window */ about_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(about_window), GTK_WIN_POS_CENTER); gtk_window_set_has_resize_grip(GTK_WINDOW(about_window), FALSE); gtk_window_set_title (GTK_WINDOW (about_window), _(_L("關於 gcin"))); g_signal_connect (G_OBJECT (about_window), "destroy", G_CALLBACK (callback_close), NULL); g_signal_connect (G_OBJECT (about_window), "delete_event", G_CALLBACK (callback_close), NULL); /* Sets the border width of the about_window. */ gtk_container_set_border_width (GTK_CONTAINER (about_window), 10); GtkWidget *label_version; GtkWidget *image; /* Create box for image and label */ hbox = gtk_hbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3); GtkWidget *separator = gtk_hseparator_new (); gtk_box_pack_start(GTK_BOX(vbox), separator, FALSE, FALSE, 3); // this doesn't work on win32 #if GTK_CHECK_VERSION(2,18,9) && UNIX && 0 char tmp[1024]; sprintf(tmp, "<a href='"FURL_LINUX"'>%s</a>\n" "<a href='"FURL_WIN32"'>%s</a>\n" "<a href='"LOG_URL"'>%s</a>\n" "<a href='"ET26_URL"'>%s</a>\n" "<a href='"PUNC_URL"'>%s</a>\n" "<a href='"ADD_PHRASE_URL"'>%s</a>\n" "<a href='"SPLIT_PHRASE_URL"'>%s</a>\n", _(_L("前往 gcin 討論區")), _(_L("gcin也有 Windows版")), _(_L("gcin改變記錄")), _(_L("推薦使用26鍵的注音鍵盤")), _(_L("使用詞音輸入標點符號")), _(_L("如何新增詞")), _(_L("如何手動斷詞")) ); GtkWidget *label = gtk_label_new(tmp); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); #else static struct { unich_t *label_str; char *url; } lab_url[] = { #if UNIX {_L("討論區"), FURL_LINUX }, {_L("gcin也有 Windows版"), FURL_WIN32}, #else {_L("討論區"), FURL_WIN32 }, {_L("gcin也有 Linux版"), FURL_LINUX}, #endif {_L("gcin也有 Android版"), FURL_ANDROID}, {_L("gcin改變記錄"), LOG_URL}, {_L("推薦使用26鍵的注音鍵盤"), ET26_URL}, {_L("使用詞音輸入標點符號"), PUNC_URL}, {_L("如何新增詞"), ADD_PHRASE_URL}, {_L("如何手動斷詞"), SPLIT_PHRASE_URL}, #if WIN32 {_L("IE內使用gcin"), IE_URL}, #endif {NULL} }; int i; for(i=0; lab_url[i].url; i++) { GtkWidget *button = gtk_button_new_with_label(_(lab_url[i].label_str)); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback_url), lab_url[i].url); } #endif #if UNIX image = gtk_image_new_from_file (SYS_ICON_DIR"/hicolor/64x64/apps/gcin.png"); #else char gcin_png[128]; sys_icon_fname("gcin.png", gcin_png); image = gtk_image_new_from_file (gcin_png); #endif label_version = gtk_label_new ("version " GCIN_VERSION " " __DATE__); gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 3); gtk_box_pack_start (GTK_BOX (hbox), label_version, FALSE, FALSE, 3); gtk_container_add (GTK_CONTAINER (about_window), vbox); GtkWidget *button = gtk_button_new_with_label (_(_L("關閉"))); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 3); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback_close), (gpointer) "cool button"); gtk_widget_show_all (about_window); return; }