summaryrefslogtreecommitdiffstats
path: root/panels/applications/cc-applications-row.c
diff options
context:
space:
mode:
Diffstat (limited to 'panels/applications/cc-applications-row.c')
-rw-r--r--panels/applications/cc-applications-row.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/panels/applications/cc-applications-row.c b/panels/applications/cc-applications-row.c
new file mode 100644
index 0000000..08516ac
--- /dev/null
+++ b/panels/applications/cc-applications-row.c
@@ -0,0 +1,108 @@
+/* cc-applications-row.c
+ *
+ * Copyright 2018 Matthias Clasen <matthias.clasen@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#include <config.h>
+#include <glib/gi18n.h>
+
+#include "cc-applications-row.h"
+#include "cc-applications-resources.h"
+
+struct _CcApplicationsRow
+{
+ GtkListBoxRow parent;
+
+ GAppInfo *info;
+ gchar *sortkey;
+
+ GtkWidget *box;
+ GtkWidget *image;
+ GtkWidget *label;
+};
+
+G_DEFINE_TYPE (CcApplicationsRow, cc_applications_row, GTK_TYPE_LIST_BOX_ROW)
+
+static void
+cc_applications_row_finalize (GObject *object)
+{
+ CcApplicationsRow *self = CC_APPLICATIONS_ROW (object);
+
+ g_object_unref (self->info);
+ g_free (self->sortkey);
+
+ G_OBJECT_CLASS (cc_applications_row_parent_class)->finalize (object);
+}
+
+static void
+cc_applications_row_class_init (CcApplicationsRowClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->finalize = cc_applications_row_finalize;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/applications/cc-applications-row.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, CcApplicationsRow, box);
+ gtk_widget_class_bind_template_child (widget_class, CcApplicationsRow, image);
+ gtk_widget_class_bind_template_child (widget_class, CcApplicationsRow, label);
+}
+
+static void
+cc_applications_row_init (CcApplicationsRow *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
+
+CcApplicationsRow *
+cc_applications_row_new (GAppInfo *info)
+{
+ CcApplicationsRow *self;
+ g_autofree gchar *key = NULL;
+ GIcon *icon;
+
+ self = g_object_new (CC_TYPE_APPLICATIONS_ROW, NULL);
+
+ self->info = g_object_ref (info);
+
+ key = g_utf8_casefold (g_app_info_get_display_name (info), -1);
+ self->sortkey = g_utf8_collate_key (key, -1);
+
+ icon = g_app_info_get_icon (info);
+ if (icon != NULL)
+ gtk_image_set_from_gicon (GTK_IMAGE (self->image), g_app_info_get_icon (info), GTK_ICON_SIZE_BUTTON);
+ else
+ gtk_image_set_from_icon_name (GTK_IMAGE (self->image), "application-x-executable", GTK_ICON_SIZE_BUTTON);
+
+ gtk_label_set_label (GTK_LABEL (self->label), g_app_info_get_display_name (info));
+
+ return self;
+}
+
+GAppInfo *
+cc_applications_row_get_info (CcApplicationsRow *self)
+{
+ return self->info;
+}
+
+const gchar *
+cc_applications_row_get_sort_key (CcApplicationsRow *self)
+{
+ return self->sortkey;
+}