* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
- * License along with the Gnome Library; see the file COPYING.LIB. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: Dave Camp <dave@novell.com>
* Alexander Larsson <alexl@redhat.com>
* It is the main building block for #GtkAppChooserDialog. Most
* applications only need to use the latter; but you can use
* this widget as part of a larger widget if you have special needs.
+ *
+ * #GtkAppChooserWidget offers detailed control over what applications
+ * are shown, using the
+ * #GtkAppChooserWidget:show-default,
+ * #GtkAppChooserWidget:show-recommended,
+ * #GtkAppChooserWidget:show-fallback,
+ * #GtkAppChooserWidget:show-other and
+ * #GtkAppChooserWidget:show-all
+ * properties. See the #GtkAppChooser documentation for more information
+ * about these groups of applications.
+ *
+ * To keep track of the selected application, use the
+ * #GtkAppChooserWidget::application-selected and #GtkAppChooserWidget::application-activated signals.
*/
struct _GtkAppChooserWidgetPrivate {
gchar *content_type;
gchar *default_text;
- gboolean show_default;
- gboolean show_recommended;
- gboolean show_fallback;
- gboolean show_other;
- gboolean show_all;
+
+ guint show_default : 1;
+ guint show_recommended : 1;
+ guint show_fallback : 1;
+ guint show_other : 1;
+ guint show_all : 1;
GtkWidget *program_list;
GtkListStore *program_list_store;
{
GtkAppChooserWidget *self = user_data;
- if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
+ if (event->button == GDK_BUTTON_SECONDARY && event->type == GDK_BUTTON_PRESS)
{
GAppInfo *info;
GtkWidget *menu;
!g_app_info_supports_files (app))
continue;
+ if (!g_app_info_should_show (app))
+ continue;
+
if (g_list_find_custom (exclude_apps, app,
(GCompareFunc) compare_apps_func))
continue;
heading_added = TRUE;
}
- app_string = g_markup_printf_escaped ("<b>%s</b>\n%s",
- g_app_info_get_display_name (app) != NULL ?
- g_app_info_get_display_name (app) : "",
- g_app_info_get_description (app) != NULL ?
- g_app_info_get_description (app) : "");
+ app_string = g_markup_printf_escaped ("%s",
+ g_app_info_get_name (app) != NULL ?
+ g_app_info_get_name (app) : "");
icon = g_app_info_get_icon (app);
unref_icon = FALSE;
gtk_list_store_set (self->priv->program_list_store, &iter,
COLUMN_APP_INFO, app,
COLUMN_GICON, icon,
- COLUMN_NAME, g_app_info_get_display_name (app),
+ COLUMN_NAME, g_app_info_get_name (app),
COLUMN_DESC, app_string,
COLUMN_EXEC, g_app_info_get_executable (app),
COLUMN_HEADING, FALSE,
g_free (string);
- string = g_markup_printf_escaped ("<b>%s</b>\n%s",
- g_app_info_get_display_name (app) != NULL ?
- g_app_info_get_display_name (app) : "",
- g_app_info_get_description (app) != NULL ?
- g_app_info_get_description (app) : "");
+ string = g_markup_printf_escaped ("%s",
+ g_app_info_get_name (app) != NULL ?
+ g_app_info_get_name (app) : "");
icon = g_app_info_get_icon (app);
if (icon == NULL)
gtk_list_store_set (self->priv->program_list_store, &iter,
COLUMN_APP_INFO, app,
COLUMN_GICON, icon,
- COLUMN_NAME, g_app_info_get_display_name (app),
+ COLUMN_NAME, g_app_info_get_name (app),
COLUMN_DESC, string,
COLUMN_EXEC, g_app_info_get_executable (app),
COLUMN_HEADING, FALSE,
static void
add_no_applications_label (GtkAppChooserWidget *self)
{
- gchar *text = NULL, *desc;
+ gchar *text = NULL, *desc = NULL;
const gchar *string;
GtkTreeIter iter;
if (self->priv->default_text == NULL)
{
- desc = g_content_type_get_description (self->priv->content_type);
+ if (self->priv->content_type)
+ desc = g_content_type_get_description (self->priv->content_type);
+
string = text = g_strdup_printf (_("No applications available to open \"%s\""),
desc);
g_free (desc);
if (self->priv->show_all)
show_headings = FALSE;
- if (self->priv->show_default)
+ if (self->priv->show_default && self->priv->content_type)
{
default_app = g_app_info_get_default_for_type (self->priv->content_type, FALSE);
}
}
- if (self->priv->show_recommended || self->priv->show_all)
+#ifndef G_OS_WIN32
+ if ((self->priv->content_type && self->priv->show_recommended) || self->priv->show_all)
{
- recommended_apps = g_app_info_get_recommended_for_type (self->priv->content_type);
+ if (self->priv->content_type)
+ recommended_apps = g_app_info_get_recommended_for_type (self->priv->content_type);
apps_added |= gtk_app_chooser_widget_add_section (self, _("Recommended Applications"),
show_headings,
g_list_copy (recommended_apps));
}
- if (self->priv->show_fallback || self->priv->show_all)
+ if ((self->priv->content_type && self->priv->show_fallback) || self->priv->show_all)
{
- fallback_apps = g_app_info_get_fallback_for_type (self->priv->content_type);
+ if (self->priv->content_type)
+ fallback_apps = g_app_info_get_fallback_for_type (self->priv->content_type);
apps_added |= gtk_app_chooser_widget_add_section (self, _("Related Applications"),
show_headings,
exclude_apps = g_list_concat (exclude_apps,
g_list_copy (fallback_apps));
}
+#endif
if (self->priv->show_other || self->priv->show_all)
{
"gicon", COLUMN_GICON,
NULL);
g_object_set (renderer,
- "stock-size", GTK_ICON_SIZE_DIALOG,
+ "stock-size", GTK_ICON_SIZE_MENU,
NULL);
/* app name renderer */
{
GtkAppChooserWidget *self = GTK_APP_CHOOSER_WIDGET (object);
- g_assert (self->priv->content_type != NULL);
-
if (G_OBJECT_CLASS (gtk_app_chooser_widget_parent_class)->constructed != NULL)
G_OBJECT_CLASS (gtk_app_chooser_widget_parent_class)->constructed (object);
{
GtkAppChooserWidget *self = GTK_APP_CHOOSER_WIDGET (object);
- if (self->priv->selected_app_info != NULL)
- {
- g_object_unref (self->priv->selected_app_info);
- self->priv->selected_app_info = NULL;
- }
+ g_clear_object (&self->priv->selected_app_info);
G_OBJECT_CLASS (gtk_app_chooser_widget_parent_class)->dispose (object);
}
/**
* GtkAppChooserWidget:show-recommended:
*
- * The #GtkAppChooserWidget:show-recommended property determines whether the app chooser
- * should show a section for recommended applications. If %FALSE, the
- * recommended applications are listed among the other applications.
+ * The #GtkAppChooserWidget:show-recommended property determines
+ * whether the app chooser should show a section for recommended
+ * applications. If %FALSE, the recommended applications are listed
+ * among the other applications.
*/
pspec = g_param_spec_boolean ("show-recommended",
P_("Show recommended apps"),
/**
* GtkAppChooserWidget:show-fallback:
*
- * The #GtkAppChooserWidget:show-fallback property determines whether the app chooser
- * should show a section for related applications. If %FALSE, the
- * related applications are listed among the other applications.
+ * The #GtkAppChooserWidget:show-fallback property determines whether
+ * the app chooser should show a section for fallback applications.
+ * If %FALSE, the fallback applications are listed among the other
+ * applications.
*/
pspec = g_param_spec_boolean ("show-fallback",
P_("Show fallback apps"),
/**
* GtkAppChooserWidget:show-other:
*
- * The #GtkAppChooserWidget:show-other property determines whether the app chooser
- * should show a section for other applications.
+ * The #GtkAppChooserWidget:show-other property determines whether
+ * the app chooser should show a section for other applications.
*/
pspec = g_param_spec_boolean ("show-other",
P_("Show other apps"),
/**
* GtkAppChooserWidget:show-all:
*
- * If the #GtkAppChooserWidget:show-all property is %TRUE, the app chooser presents
- * all applications in a single list, without subsections for
- * default, recommended or related applications.
+ * If the #GtkAppChooserWidget:show-all property is %TRUE, the app
+ * chooser presents all applications in a single list, without
+ * subsections for default, recommended or related applications.
*/
pspec = g_param_spec_boolean ("show-all",
P_("Show all apps"),
/**
* GtkAppChooserWidget:default-text:
*
- * The #GtkAppChooserWidget:default-text property determines the text that appears
- * in the widget when there are no applications for the given content type.
+ * The #GtkAppChooserWidget:default-text property determines the text
+ * that appears in the widget when there are no applications for the
+ * given content type.
* See also gtk_app_chooser_widget_set_default_text().
*/
pspec = g_param_spec_string ("default-text",
* @application: the activated #GAppInfo
*
* Emitted when an application item is activated from the widget's list.
+ *
* This usually happens when the user double clicks an item, or an item
* is selected and the user presses one of the keys Space, Shift+Space,
* Return or Enter.
*
* Emitted when a context menu is about to popup over an application item.
* Clients can insert menu items into the provided #GtkMenu object in the
- * callback of this signal; the context menu will be shown over the item if
- * at least one item has been added to the menu.
+ * callback of this signal; the context menu will be shown over the item
+ * if at least one item has been added to the menu.
*/
signals[SIGNAL_POPULATE_POPUP] =
g_signal_new ("populate-popup",
gtk_widget_show (self->priv->program_list);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->program_list));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
gtk_tree_selection_set_select_function (selection, gtk_app_chooser_selection_func,
self, NULL);
g_signal_connect_swapped (selection, "changed",