diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2010-11-24 18:45:42 +0100 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2010-11-24 18:45:42 +0100 |
commit | 2a95707b4c77606b539c5ddacded4eadaf4de7cb (patch) | |
tree | a18f94ce1f6b2d3ee479f017e622a7399fff0fd0 /tests | |
parent | 627f9b70a7d9d24c3a206c6866292a141d41b731 (diff) | |
download | gtk+-2a95707b4c77606b539c5ddacded4eadaf4de7cb.tar.gz |
app-chooser-combobox: add an initial implementation
GtkAppChooserCombobox is an implementation of GtkAppChooser inside a
combobox that shows recommended applications for a given content type.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/testappchoosercombo.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/testappchoosercombo.c b/tests/testappchoosercombo.c new file mode 100644 index 0000000000..11af64f2ea --- /dev/null +++ b/tests/testappchoosercombo.c @@ -0,0 +1,104 @@ +/* testappchoosercombo.c + * Copyright (C) 2010 Red Hat, Inc. + * Authors: Cosimo Cecchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <config.h> +#include <stdlib.h> + +#include <gtk/gtk.h> + +static GtkWidget *toplevel, *combobox, *box; +static GtkWidget *sel_image, *sel_name; + +static void +combo_changed_cb (GtkComboBox *cb, + gpointer user_data) +{ + GAppInfo *app_info; + + app_info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (cb)); + + if (app_info == NULL) + return; + + gtk_image_set_from_gicon (GTK_IMAGE (sel_image), g_app_info_get_icon (app_info), + GTK_ICON_SIZE_DIALOG); + gtk_label_set_text (GTK_LABEL (sel_name), g_app_info_get_display_name (app_info)); + + g_object_unref (app_info); +} + +static void +special_item_activated_cb (GtkAppChooserComboBox *cb, + gpointer user_data) +{ + gtk_image_set_from_gicon (GTK_IMAGE (sel_image), g_themed_icon_new ("face-smile"), + GTK_ICON_SIZE_DIALOG); + gtk_label_set_text (GTK_LABEL (sel_name), "Special Item"); +} + +int +main (int argc, + char **argv) +{ + GtkWidget *w; + + g_type_init (); + gtk_init (&argc, &argv); + + toplevel = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_container_set_border_width (GTK_CONTAINER (toplevel), 12); + + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); + gtk_container_add (GTK_CONTAINER (toplevel), box); + + combobox = gtk_app_chooser_combo_box_new ("image/jpeg"); + gtk_box_pack_start (GTK_BOX (box), combobox, TRUE, TRUE, 0); + + g_signal_connect (combobox, "changed", + G_CALLBACK (combo_changed_cb), NULL); + + w = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (w), "<b>Selected app info</b>"); + gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0); + + w = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0); + + sel_image = gtk_image_new (); + gtk_box_pack_start (GTK_BOX (w), sel_image, TRUE, TRUE, 0); + sel_name = gtk_label_new (NULL); + gtk_box_pack_start (GTK_BOX (w), sel_name, TRUE, TRUE, 0); + + gtk_app_chooser_combo_box_append_separator (GTK_APP_CHOOSER_COMBO_BOX (combobox)); + gtk_app_chooser_combo_box_append_custom_item (GTK_APP_CHOOSER_COMBO_BOX (combobox), + "Hey, I'm special!", + g_themed_icon_new ("face-smile"), + special_item_activated_cb, + NULL); + + gtk_widget_show_all (toplevel); + + g_signal_connect (toplevel, "delete-event", + G_CALLBACK (gtk_main_quit), NULL); + + gtk_main (); + + return EXIT_SUCCESS; +} |