[gnome-software/wip/folders: 4/5] Begin to add a selection mode to the installed list
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/wip/folders: 4/5] Begin to add a selection mode to the installed list
- Date: Mon, 4 Nov 2013 03:48:51 +0000 (UTC)
commit 97031b3a2258420571ab9c70087e3f12ddeefc4f
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Nov 3 01:48:19 2013 -0400
Begin to add a selection mode to the installed list
src/app-widget.ui | 9 +++++++++
src/gnome-software.ui | 14 ++++++++++++++
src/gs-app-widget.c | 36 ++++++++++++++++++++++++++++++++++++
src/gs-app-widget.h | 5 +++++
src/gs-shell-installed.c | 46 +++++++++++++++++++++++++++++++++++++++++++---
src/gs-shell.c | 2 ++
6 files changed, 109 insertions(+), 3 deletions(-)
---
diff --git a/src/app-widget.ui b/src/app-widget.ui
index 1bdeb70..2a3ec92 100644
--- a/src/app-widget.ui
+++ b/src/app-widget.ui
@@ -10,6 +10,15 @@
<property name="orientation">horizontal</property>
<property name="spacing">3</property>
<child>
+ <object class="GtkCheckButton" id="checkbox">
+ <property name="margin-right">9</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="pixel_size">64</property>
diff --git a/src/gnome-software.ui b/src/gnome-software.ui
index f7339ea..48ef35e 100644
--- a/src/gnome-software.ui
+++ b/src/gnome-software.ui
@@ -2,6 +2,11 @@
<!-- Generated with glade 3.15.2 on Thu Aug 15 17:13:59 2013 -->
<interface>
<!-- interface-requires gtk+ 3.10 -->
+ <object class="GtkImage" id="button_select_image">
+ <property name="visible">True</property>
+ <property name="icon_name">object-select-symbolic</property>
+ <property name="icon_size">0</property>
+ </object>
<object class="GtkApplicationWindow" id="window_software">
<property name="can_focus">False</property>
<property name="default-width">1200</property>
@@ -182,6 +187,15 @@
<property name="pack_type">end</property>
</packing>
</child>
+ <child>
+ <object class="GtkToggleButton" id="button_select">
+ <property name="image">button_select_image</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
diff --git a/src/gs-app-widget.c b/src/gs-app-widget.c
index 10ad7cc..a6a13e8 100644
--- a/src/gs-app-widget.c
+++ b/src/gs-app-widget.c
@@ -41,8 +41,10 @@ struct _GsAppWidgetPrivate
GtkWidget *button;
GtkWidget *spinner;
GtkWidget *label;
+ GtkWidget *checkbox;
gboolean colorful;
gboolean show_update;
+ gboolean selectable;
};
G_DEFINE_TYPE_WITH_PRIVATE (GsAppWidget, gs_app_widget, GTK_TYPE_BIN)
@@ -179,6 +181,15 @@ gs_app_widget_refresh (GsAppWidget *app_widget)
default:
break;
}
+
+ if (priv->selectable) {
+ if (gs_app_get_id_kind (priv->app) == GS_APP_ID_KIND_DESKTOP ||
+ gs_app_get_id_kind (priv->app) == GS_APP_ID_KIND_WEBAPP)
+ gtk_widget_set_visible (priv->checkbox, TRUE);
+ gtk_widget_set_sensitive (priv->button, FALSE);
+ } else {
+ gtk_widget_set_visible (priv->checkbox, FALSE);
+ }
}
/**
@@ -258,6 +269,7 @@ gs_app_widget_class_init (GsAppWidgetClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GsAppWidget, button);
gtk_widget_class_bind_template_child_private (widget_class, GsAppWidget, spinner);
gtk_widget_class_bind_template_child_private (widget_class, GsAppWidget, label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppWidget, checkbox);
}
static void
@@ -310,6 +322,30 @@ gs_app_widget_set_show_update (GsAppWidget *app_widget, gboolean show_update)
app_widget->priv->show_update = show_update;
}
+void
+gs_app_widget_set_selectable (GsAppWidget *app_widget, gboolean selectable)
+{
+ app_widget->priv->selectable = selectable;
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app_widget->priv->checkbox), FALSE);
+ gs_app_widget_refresh (app_widget);
+}
+
+void
+gs_app_widget_set_selected (GsAppWidget *app_widget, gboolean selected)
+{
+ if (app_widget->priv->selectable)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app_widget->priv->checkbox), selected);
+}
+
+gboolean
+gs_app_widget_get_selected (GsAppWidget *app_widget)
+{
+ if (app_widget->priv->selectable)
+ return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (app_widget->priv->checkbox));
+ else
+ return FALSE;
+}
+
GtkWidget *
gs_app_widget_new (void)
{
diff --git a/src/gs-app-widget.h b/src/gs-app-widget.h
index 5c0324d..f6bff46 100644
--- a/src/gs-app-widget.h
+++ b/src/gs-app-widget.h
@@ -59,6 +59,11 @@ void gs_app_widget_set_colorful (GsAppWidget *app_widget,
gboolean colorful);
void gs_app_widget_set_show_update (GsAppWidget *app_widget,
gboolean show_update);
+void gs_app_widget_set_selectable (GsAppWidget *app_widget,
+ gboolean selectable);
+void gs_app_widget_set_selected (GsAppWidget *app_widget,
+ gboolean selected);
+gboolean gs_app_widget_get_selected (GsAppWidget *app_widget);
GsApp *gs_app_widget_get_app (GsAppWidget *app_widget);
void gs_app_widget_set_app (GsAppWidget *app_widget,
GsApp *app);
diff --git a/src/gs-shell-installed.c b/src/gs-shell-installed.c
index f00ce5a..ad272bf 100644
--- a/src/gs-shell-installed.c
+++ b/src/gs-shell-installed.c
@@ -51,6 +51,7 @@ struct GsShellInstalledPrivate
gboolean cache_valid;
gboolean waiting;
GsShell *shell;
+ gboolean selection_mode;
};
G_DEFINE_TYPE (GsShellInstalled, gs_shell_installed, G_TYPE_OBJECT)
@@ -73,11 +74,18 @@ gs_shell_installed_app_widget_activated_cb (GtkListBox *list_box,
GsShellInstalled *shell_installed)
{
GsAppWidget *app_widget;
- GsApp *app;
app_widget = GS_APP_WIDGET (gtk_bin_get_child (GTK_BIN (row)));
- app = gs_app_widget_get_app (app_widget);
- gs_shell_show_app (shell_installed->priv->shell, app);
+
+ if (shell_installed->priv->selection_mode) {
+ gboolean selected;
+ selected = gs_app_widget_get_selected (app_widget);
+ gs_app_widget_set_selected (app_widget, !selected);
+ } else {
+ GsApp *app;
+ app = gs_app_widget_get_app (app_widget);
+ gs_shell_show_app (shell_installed->priv->shell, app);
+ }
}
typedef struct {
@@ -240,6 +248,10 @@ gs_shell_installed_add_app (GsShellInstalled *shell, GsApp *app)
gs_app_widget_set_size_groups (GS_APP_WIDGET (widget),
priv->sizegroup_image,
priv->sizegroup_name);
+
+ gs_app_widget_set_selectable (GS_APP_WIDGET (widget),
+ priv->selection_mode);
+
gtk_widget_show (widget);
}
@@ -298,6 +310,9 @@ gs_shell_installed_refresh (GsShellInstalled *shell_installed, gboolean scroll_u
if (gs_shell_get_mode (priv->shell) == GS_SHELL_MODE_INSTALLED) {
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "buttonbox_main"));
gtk_widget_show (widget);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_select"));
+ gtk_widget_show (widget);
}
gtk_list_box_invalidate_sort (priv->list_box_installed);
@@ -542,6 +557,26 @@ gs_shell_installed_pending_apps_changed_cb (GsPluginLoader *plugin_loader,
g_ptr_array_unref (pending);
}
+static void
+selection_mode_cb (GtkToggleButton *button, GsShellInstalled *shell_installed)
+{
+ GsShellInstalledPrivate *priv = shell_installed->priv;
+ GList *children, *l;
+ GtkWidget *row;
+ GtkWidget *app_widget;
+
+ priv->selection_mode = gtk_toggle_button_get_active (button);
+
+ children = gtk_container_get_children (GTK_CONTAINER (priv->list_box_installed));
+ for (l = children; l; l = l->next) {
+ row = l->data;
+ app_widget = gtk_bin_get_child (GTK_BIN (row));
+ gs_app_widget_set_selectable (GS_APP_WIDGET (app_widget),
+ priv->selection_mode);
+ }
+ g_list_free (children);
+}
+
/**
* gs_shell_installed_setup:
*/
@@ -553,6 +588,7 @@ gs_shell_installed_setup (GsShellInstalled *shell_installed,
GCancellable *cancellable)
{
GsShellInstalledPrivate *priv = shell_installed->priv;
+ GtkWidget *widget;
g_return_if_fail (GS_IS_SHELL_INSTALLED (shell_installed));
@@ -575,6 +611,10 @@ gs_shell_installed_setup (GsShellInstalled *shell_installed,
gtk_list_box_set_sort_func (priv->list_box_installed,
gs_shell_installed_sort_func,
shell_installed, NULL);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_select"));
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (selection_mode_cb), shell_installed);
}
/**
diff --git a/src/gs-shell.c b/src/gs-shell.c
index b060fcd..1eaa070 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -119,6 +119,8 @@ gs_shell_change_mode (GsShell *shell,
gtk_widget_hide (widget);
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_remove"));
gtk_widget_hide (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_select"));
+ gtk_widget_hide (widget);
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "application_details_header"));
gtk_widget_hide (widget);
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_back"));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]