void xkb_layout_preview_update (GladeXML * chooser_dialog) { #ifdef HAVE_X11_EXTENSIONS_XKB_H GtkWidget *chooser = CWID ("xkb_layout_chooser"); GtkWidget *kbdraw = GTK_WIDGET (g_object_get_data (G_OBJECT (chooser), "kbdraw")); gchar *id = xkb_layout_chooser_get_selected_id (chooser_dialog); xkb_layout_preview_set_drawing_layout (kbdraw, id); g_free (id); #endif }
void xkb_layout_chooser_response (GtkDialog * dialog, gint response) { switch (response) case GTK_RESPONSE_OK:{ /* Handled by the main code */ break; case RESPONSE_PREVIEW:{ gchar *selected_id = (gchar *) xkb_layout_chooser_get_selected_id (dialog); if (selected_id != NULL) { if (preview_dialog == NULL) { preview_dialog = gkbd_keyboard_drawing_dialog_new (); g_signal_connect (G_OBJECT (preview_dialog), "destroy", G_CALLBACK (xkb_preview_destroy_callback), NULL); /* Put into the separate group to avoid conflict with modal parent */ gtk_window_group_add_window (gtk_window_group_new (), GTK_WINDOW (preview_dialog)); }; gkbd_keyboard_drawing_dialog_set_layout (preview_dialog, config_registry, selected_id); gtk_widget_show_all (preview_dialog); } } return; } if (preview_dialog != NULL) { gtk_widget_destroy (preview_dialog); } if (search_pattern_list != NULL) { g_strfreev (search_pattern_list); search_pattern_list = NULL; } gtk_widget_destroy (GTK_WIDGET (dialog)); }
static void xkb_layout_chooser_print (GtkBuilder * chooser_dialog) { GtkWidget *chooser = CWID ("xkb_layout_chooser"); GtkWidget *kbdraw = GTK_WIDGET (g_object_get_data (G_OBJECT (chooser), "kbdraw")); const char *id = xkb_layout_chooser_get_selected_id (chooser_dialog); char *descr = xkb_layout_description_utf8 (id); matekbd_keyboard_drawing_print (MATEKBD_KEYBOARD_DRAWING (kbdraw), GTK_WINDOW (CWID ("xkb_layout_chooser")), descr); g_free (descr); }
static gboolean xkb_layout_chooser_selection_dupe (GtkDialog * dialog) { gchar *selected_id = (gchar *) xkb_layout_chooser_get_selected_id (dialog); gchar **layouts_list, **pl; gboolean rv = FALSE; if (selected_id == NULL) return rv; layouts_list = pl = xkb_layouts_get_selected_list (); while (pl && *pl) { if (!g_ascii_strcasecmp (*pl++, selected_id)) { rv = TRUE; break; } } g_strfreev (layouts_list); return rv; }
static void xkb_layout_chooser_response (GtkDialog * dialog, gint response, GtkBuilder * chooser_dialog) { GdkRectangle rect; if (response == GTK_RESPONSE_OK) { gchar *selected_id = (gchar *) xkb_layout_chooser_get_selected_id (chooser_dialog); if (selected_id != NULL) { GSList *layouts_list = xkb_layouts_get_selected_list (); selected_id = g_strdup (selected_id); layouts_list = g_slist_append (layouts_list, selected_id); xkb_layouts_set_selected_list (layouts_list); xkl_layout_chooser_add_default_switcher_if_necessary (layouts_list); clear_xkb_elements_list (layouts_list); } } else if (response == gtk_dialog_get_response_for_widget (dialog, CWID ("btnPrint"))) { xkb_layout_chooser_print (chooser_dialog); g_signal_stop_emission_by_name (dialog, "response"); return; } gtk_window_get_position (GTK_WINDOW (dialog), &rect.x, &rect.y); gtk_window_get_size (GTK_WINDOW (dialog), &rect.width, &rect.height); matekbd_preview_save_position (&rect); }
static void chooser_response (GtkDialog *chooser, int response_id, GtkBuilder *dialog) { if (response_id == GTK_RESPONSE_OK) { char *id, *name; GtkListStore *list_store; list_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (WID ("xkb_layouts_selected")))); id = xkb_layout_chooser_get_selected_id (chooser); name = xkb_layout_description_utf8 (id); gtk_list_store_insert_with_values (list_store, NULL, G_MAXINT, SEL_LAYOUT_TREE_COL_DESCRIPTION, name, SEL_LAYOUT_TREE_COL_ID, id, SEL_LAYOUT_TREE_COL_ENABLED, TRUE, -1); g_free (name); add_default_switcher_if_necessary (); update_layouts_list (GTK_TREE_MODEL (list_store), dialog); } xkb_layout_chooser_response (chooser, response_id); }