static GObject * fcitx_im_dialog_constructor (GType gtype, guint n_properties, GObjectConstructParam *properties) { GObject *obj; FcitxImDialog *self; GtkWidget *widget; obj = G_OBJECT_CLASS (fcitx_im_dialog_parent_class)->constructor (gtype, n_properties, properties); self = FCITX_IM_DIALOG (obj); widget = GTK_WIDGET(gtk_builder_get_object (self->builder, "im_dialog")); GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(self)); gtk_container_add (GTK_CONTAINER (content_area), widget); _fcitx_im_dialog_connect(self); return obj; }
static void fcitx_im_dialog_init(FcitxImDialog* self) { gtk_window_set_title(GTK_WINDOW(self), _("Add input method")); gtk_window_set_modal(GTK_WINDOW(self), TRUE); gtk_dialog_add_buttons(GTK_DIALOG(self), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL ); gtk_dialog_set_alternative_button_order (GTK_DIALOG (self), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); g_signal_connect(self, "response", G_CALLBACK(_fcitx_im_dialog_response_cb), NULL); GtkCellRenderer* renderer; GtkTreeViewColumn* column; gtk_widget_set_size_request(GTK_WIDGET(self), 400, 300); self->availimstore = gtk_list_store_new(IM_N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER); self->filtermodel = gtk_tree_model_filter_new(GTK_TREE_MODEL(self->availimstore), NULL); gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(self->filtermodel), (GtkTreeModelFilterVisibleFunc) _fcitx_im_dialog_filter_func, self , NULL); self->sortmodel = gtk_tree_model_sort_new_with_model(self->filtermodel); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(self->sortmodel), IM_LIST_IM_STRING, GTK_SORT_ASCENDING); self->availimview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(self->sortmodel)); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _("Input Method"), renderer, "text", IM_LIST_IM_STRING, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(self->availimview), column); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(self->availimview), FALSE); GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(self->availimview)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(_fcitx_im_dialog_im_selection_changed), self); GtkWidget* scrolledwindow = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scrolledwindow), self->availimview); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(self))), scrolledwindow, TRUE, TRUE, 0); g_object_set(G_OBJECT(scrolledwindow), "margin-left", 5, "margin-right", 5, "shadow-type", GTK_SHADOW_IN, NULL); self->onlycurlangcheckbox = gtk_check_button_new_with_label(_("Only Show Current Language")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->onlycurlangcheckbox), TRUE); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(self))), self->onlycurlangcheckbox, FALSE, TRUE, 0); g_object_set(G_OBJECT(self->onlycurlangcheckbox), "margin-left", 5, "margin-right", 5, NULL); self->filterentry = gtk_entry_new(); gtk_entry_set_icon_from_stock (GTK_ENTRY (self->filterentry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR); #if GTK_CHECK_VERSION(3,2,0) gtk_entry_set_placeholder_text(GTK_ENTRY (self->filterentry), _("Search Input Method")); #endif gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(self))), self->filterentry, FALSE, TRUE, 0); g_object_set(G_OBJECT(self->filterentry), "margin-left", 5, "margin-right", 5, NULL); g_signal_connect(G_OBJECT(self->filterentry), "changed", G_CALLBACK(_fcitx_im_dialog_filtertext_changed), self); g_signal_connect(G_OBJECT(self->onlycurlangcheckbox), "toggled", G_CALLBACK(_fcitx_im_dialog_onlycurlangcheckbox_toggled), self); g_signal_connect(G_OBJECT(self->filterentry), "icon-press", G_CALLBACK (icon_press_cb), NULL); _fcitx_im_dialog_connect(self); }