user-accounts: Convert UmHistoryDialog to GtkTemplate

This commit is contained in:
Robert Ancell 2018-11-06 14:16:45 +13:00 committed by Ondrej Holy
parent b5711c59ec
commit c2940dd426
7 changed files with 104 additions and 148 deletions

View file

@ -100,7 +100,6 @@ struct _CcUserPanel {
CcLanguageChooser *language_chooser;
UmPhotoDialog *photo_dialog;
UmHistoryDialog *history_dialog;
gint other_accounts;
@ -1071,12 +1070,22 @@ change_fingerprint (CcUserPanel *self)
static void
show_history (CcUserPanel *self)
{
UmHistoryDialog *dialog;
ActUser *user;
GtkWindow *parent;
gint parent_width;
user = get_selected_user (self);
dialog = um_history_dialog_new (user);
um_history_dialog_set_user (self->history_dialog, user);
um_history_dialog_show (self->history_dialog, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))));
parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self)));
gtk_window_get_size (parent, &parent_width, NULL);
gtk_window_set_default_size (GTK_WINDOW (dialog), parent_width * 0.6, -1);
gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (GTK_WIDGET (dialog));
}
static void
@ -1377,7 +1386,6 @@ cc_user_panel_init (CcUserPanel *self)
self->login_screen_settings = settings_or_null ("org.gnome.login-screen");
self->photo_dialog = um_photo_dialog_new (GTK_WIDGET (self->user_icon_button));
self->history_dialog = um_history_dialog_new ();
setup_main_window (self);
}
@ -1391,7 +1399,6 @@ cc_user_panel_dispose (GObject *object)
g_clear_object (&self->login_screen_settings);
g_clear_pointer (&self->history_dialog, um_history_dialog_free);
if (self->account_dialog) {
gtk_dialog_response (GTK_DIALOG (self->account_dialog), GTK_RESPONSE_DELETE_EVENT);
self->account_dialog = NULL;

View file

@ -119,9 +119,9 @@ resource_data = files(
'data/account-fingerprint.ui',
'data/carousel.css',
'data/carousel.ui',
'data/history-dialog.ui',
'data/join-dialog.ui',
'data/user-accounts-dialog.css',
'um-history-dialog.ui',
)
common_sources += gnome.compile_resources(

View file

@ -33,31 +33,32 @@
#include "cc-util.h"
#include "um-history-dialog.h"
#include "um-resources.h"
#include "um-utils.h"
struct _UmHistoryDialog {
GtkWidget *dialog;
GtkBuilder *builder;
struct _UmHistoryDialog
{
GtkDialog parent_instance;
GDateTime *week;
GDateTime *current_week;
GtkHeaderBar *header_bar;
GtkListBox *history_box;
GtkButton *next_button;
GtkButton *previous_button;
ActUser *user;
GDateTime *week;
GDateTime *current_week;
ActUser *user;
};
G_DEFINE_TYPE (UmHistoryDialog, um_history_dialog, GTK_TYPE_DIALOG)
typedef struct {
gint64 login_time;
gint64 logout_time;
const gchar *type;
} UmLoginHistory;
static GtkWidget *
get_widget (UmHistoryDialog *um,
const char *name)
{
return (GtkWidget *)gtk_builder_get_object (um->builder, name);
}
static void
show_week_label (UmHistoryDialog *um)
{
@ -97,7 +98,7 @@ show_week_label (UmHistoryDialog *um)
g_free (to);
}
gtk_header_bar_set_subtitle (GTK_HEADER_BAR (get_widget (um, "dialog-header-bar")), label);
gtk_header_bar_set_subtitle (um->header_bar, label);
g_free (label);
}
@ -105,13 +106,11 @@ show_week_label (UmHistoryDialog *um)
static void
clear_history (UmHistoryDialog *um)
{
GtkWidget *box;
GList *list, *it;
box = get_widget (um, "history-box");
list = gtk_container_get_children (GTK_CONTAINER (box));
for (it = list; it != NULL; it = it->next) {
gtk_container_remove (GTK_CONTAINER (box), GTK_WIDGET (it->data));
list = gtk_container_get_children (GTK_CONTAINER (um->history_box));
for (it = list; it != NULL; it = it->next) {
gtk_container_remove (GTK_CONTAINER (um->history_box), GTK_WIDGET (it->data));
}
g_list_free (list);
}
@ -159,14 +158,14 @@ set_sensitivity (UmHistoryDialog *um)
sensitive = g_date_time_to_unix (um->week) > history.login_time;
g_array_free (login_history, TRUE);
}
gtk_widget_set_sensitive (get_widget (um, "previous-button"), sensitive);
gtk_widget_set_sensitive (GTK_WIDGET (um->previous_button), sensitive);
sensitive = (g_date_time_compare (um->current_week, um->week) == 1);
gtk_widget_set_sensitive (get_widget (um, "next-button"), sensitive);
gtk_widget_set_sensitive (GTK_WIDGET (um->next_button), sensitive);
}
static void
add_record (GtkWidget *box, GDateTime *datetime, gchar *record_string, gint line)
add_record (UmHistoryDialog *um, GDateTime *datetime, gchar *record_string, gint line)
{
gchar *date, *time, *str;
GtkWidget *label, *row;
@ -198,7 +197,7 @@ add_record (GtkWidget *box, GDateTime *datetime, gchar *record_string, gint line
g_free (time);
g_date_time_unref (datetime);
gtk_list_box_insert (GTK_LIST_BOX (box), row, line);
gtk_list_box_insert (um->history_box, row, line);
}
static void
@ -208,7 +207,6 @@ show_week (UmHistoryDialog *um)
GDateTime *datetime, *temp;
gint64 from, to;
gint i, line;
GtkWidget *box;
UmLoginHistory history;
show_week_label (um);
@ -233,8 +231,6 @@ show_week (UmHistoryDialog *um)
}
/* Add new session records */
box = get_widget (um, "history-box");
gtk_widget_show (box);
line = 0;
for (;i >= 0; i--) {
history = g_array_index (login_history, UmLoginHistory, i);
@ -251,13 +247,13 @@ show_week (UmHistoryDialog *um)
if (history.logout_time > 0 && history.logout_time < to) {
datetime = g_date_time_new_from_unix_local (history.logout_time);
add_record (box, datetime, _("Session Ended"), line);
add_record (um, datetime, _("Session Ended"), line);
line++;
}
if (history.login_time >= from) {
datetime = g_date_time_new_from_unix_local (history.login_time);
add_record (box, datetime, _("Session Started"), line);
add_record (um, datetime, _("Session Started"), line);
line++;
}
}
@ -266,8 +262,7 @@ show_week (UmHistoryDialog *um)
}
static void
show_previous (GtkButton *button,
UmHistoryDialog *um)
previous_button_clicked_cb (UmHistoryDialog *um)
{
GDateTime *temp;
@ -279,8 +274,7 @@ show_previous (GtkButton *button,
}
static void
show_next (GtkButton *button,
UmHistoryDialog *um)
next_button_clicked_cb (UmHistoryDialog *um)
{
GDateTime *temp;
@ -292,46 +286,58 @@ show_next (GtkButton *button,
}
static void
update_dialog_title (UmHistoryDialog *um)
um_history_dialog_dispose (GObject *object)
{
gchar *title;
UmHistoryDialog *um = UM_HISTORY_DIALOG (object);
/* Translators: This is the title of the "Account Activity" dialog.
The %s is the user real name. */
title = g_strdup_printf (_("%s — Account Activity"),
act_user_get_real_name (um->user));
g_clear_object (&um->user);
g_clear_pointer (&um->week, g_date_time_unref);
g_clear_pointer (&um->current_week, g_date_time_unref);
gtk_window_set_title (GTK_WINDOW (um->dialog), title);
g_free (title);
G_OBJECT_CLASS (um_history_dialog_parent_class)->dispose (object);
}
void
um_history_dialog_set_user (UmHistoryDialog *um,
ActUser *user)
um_history_dialog_class_init (UmHistoryDialogClass *klass)
{
if (um->user) {
g_clear_object (&um->user);
}
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
if (user) {
um->user = g_object_ref (user);
}
object_class->dispose = um_history_dialog_dispose;
update_dialog_title (um);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/user-accounts/um-history-dialog.ui");
gtk_widget_class_bind_template_child (widget_class, UmHistoryDialog, header_bar);
gtk_widget_class_bind_template_child (widget_class, UmHistoryDialog, history_box);
gtk_widget_class_bind_template_child (widget_class, UmHistoryDialog, next_button);
gtk_widget_class_bind_template_child (widget_class, UmHistoryDialog, previous_button);
gtk_widget_class_bind_template_callback (widget_class, next_button_clicked_cb);
gtk_widget_class_bind_template_callback (widget_class, previous_button_clicked_cb);
}
void
um_history_dialog_show (UmHistoryDialog *um,
GtkWindow *parent)
um_history_dialog_init (UmHistoryDialog *um)
{
g_resources_register (um_get_resource ());
gtk_widget_init_template (GTK_WIDGET (um));
}
UmHistoryDialog *
um_history_dialog_new (ActUser *user)
{
UmHistoryDialog *um;
GDateTime *temp, *local;
gint parent_width;
g_autofree gchar *title = NULL;
if (um->week)
g_date_time_unref (um->week);
if (um->current_week)
g_date_time_unref (um->current_week);
g_return_val_if_fail (ACT_IS_USER (user), NULL);
um = g_object_new (UM_TYPE_HISTORY_DIALOG,
"use-header-bar", 1,
NULL);
um->user = g_object_ref (user);
/* Set the first day of this week */
local = g_date_time_new_now_local ();
@ -344,69 +350,13 @@ um_history_dialog_show (UmHistoryDialog *um,
g_date_time_unref (local);
g_date_time_unref (temp);
/* Translators: This is the title of the "Account Activity" dialog.
The %s is the user real name. */
title = g_strdup_printf (_("%s — Account Activity"),
act_user_get_real_name (um->user));
gtk_header_bar_set_title (um->header_bar, title);
show_week (um);
gtk_window_get_size (parent, &parent_width, NULL);
gtk_window_set_default_size (GTK_WINDOW (um->dialog), parent_width * 0.6, -1);
gtk_window_set_transient_for (GTK_WINDOW (um->dialog), parent);
gtk_window_present (GTK_WINDOW (um->dialog));
}
UmHistoryDialog *
um_history_dialog_new (void)
{
GError *error = NULL;
UmHistoryDialog *um;
GtkWidget *widget;
um = g_new0 (UmHistoryDialog, 1);
um->builder = gtk_builder_new ();
if (!gtk_builder_add_from_resource (um->builder, "/org/gnome/control-center/user-accounts/history-dialog.ui", &error)) {
g_error ("%s", error->message);
g_error_free (error);
g_free (um);
return NULL;
}
um->dialog = get_widget (um, "dialog");
g_signal_connect (um->dialog, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL);
widget = get_widget (um, "next-button");
g_signal_connect (widget, "clicked", G_CALLBACK (show_next), um);
widget = get_widget (um, "previous-button");
g_signal_connect (widget, "clicked", G_CALLBACK (show_previous), um);
widget = get_widget (um, "next-image");
gtk_image_set_from_icon_name (GTK_IMAGE (widget),
"go-next-symbolic",
GTK_ICON_SIZE_MENU);
widget = get_widget (um, "previous-image");
gtk_image_set_from_icon_name (GTK_IMAGE (widget),
"go-previous-symbolic",
GTK_ICON_SIZE_MENU);
return um;
}
void
um_history_dialog_free (UmHistoryDialog *um)
{
gtk_widget_destroy (um->dialog);
g_clear_object (&um->user);
g_clear_object (&um->builder);
if (um->week) {
g_date_time_unref (um->week);
}
if (um->current_week) {
g_date_time_unref (um->current_week);
}
g_free (um);
}

View file

@ -25,13 +25,9 @@
G_BEGIN_DECLS
typedef struct _UmHistoryDialog UmHistoryDialog;
#define UM_TYPE_HISTORY_DIALOG (um_history_dialog_get_type ())
G_DECLARE_FINAL_TYPE (UmHistoryDialog, um_history_dialog, UM, HISTORY_DIALOG, GtkDialog)
UmHistoryDialog *um_history_dialog_new (void);
void um_history_dialog_free (UmHistoryDialog *dialog);
void um_history_dialog_set_user (UmHistoryDialog *dialog,
ActUser *user);
void um_history_dialog_show (UmHistoryDialog *dialog,
GtkWindow *parent);
UmHistoryDialog *um_history_dialog_new (ActUser *user);
G_END_DECLS

View file

@ -1,16 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.8 -->
<object class="GtkDialog" id="dialog">
<template class="UmHistoryDialog" parent="GtkDialog">
<property name="can_focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="window_position">center-on-parent</property>
<property name="icon_name">system-users</property>
<property name="type_hint">dialog</property>
<property name="use_header_bar">1</property>
<child internal-child="headerbar">
<object class="GtkHeaderBar" id="dialog-header-bar">
<object class="GtkHeaderBar" id="header_bar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="show_close_button">True</property>
@ -22,18 +19,21 @@
<class name="linked"/>
</style>
<child>
<object class="GtkButton" id="previous-button">
<object class="GtkButton" id="previous_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="valign">center</property>
<signal name="clicked" handler="previous_button_clicked_cb" object="UmHistoryDialog" swapped="yes"/>
<style>
<class name="image-button"/>
</style>
<child>
<object class="GtkImage" id="previous-image">
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">go-previous-symbolic</property>
<property name="pixel_size">16</property>
</object>
</child>
</object>
@ -42,18 +42,21 @@
</packing>
</child>
<child>
<object class="GtkButton" id="next-button">
<object class="GtkButton" id="next_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="valign">center</property>
<signal name="clicked" handler="next_button_clicked_cb" object="UmHistoryDialog" swapped="yes"/>
<style>
<class name="image-button"/>
</style>
<child>
<object class="GtkImage" id="next-image">
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">go-next-symbolic</property>
<property name="pixel_size">16</property>
</object>
</child>
</object>
@ -66,17 +69,17 @@
</object>
</child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<object class="GtkBox">
<property name="border_width">0</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="box1">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<object class="GtkScrolledWindow">
<property name="width_request">350</property>
<property name="height_request">300</property>
<property name="visible">True</property>
@ -86,7 +89,7 @@
<property name="hscrollbar_policy">never</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkListBox" id="history-box">
<object class="GtkListBox" id="history_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
@ -110,5 +113,5 @@
</child>
</object>
</child>
</object>
</template>
</interface>

View file

@ -7,7 +7,6 @@
<file alias="avatar-chooser.ui" preprocess="xml-stripblanks">data/avatar-chooser.ui</file>
<file alias="join-dialog.ui" preprocess="xml-stripblanks">data/join-dialog.ui</file>
<file alias="account-fingerprint.ui" preprocess="xml-stripblanks">data/account-fingerprint.ui</file>
<file alias="history-dialog.ui" preprocess="xml-stripblanks">data/history-dialog.ui</file>
<file alias="user-accounts-dialog.css">data/user-accounts-dialog.css</file>
<file alias="carousel.ui" preprocess="xml-stripblanks">data/carousel.ui</file>
<file alias="carousel.css">data/carousel.css</file>
@ -23,5 +22,6 @@
<file alias="right-little-finger.png">data/icons/right-little-finger.png</file>
<file alias="right-ring-finger.png">data/icons/right-ring-finger.png</file>
<file alias="right-thumb.png">data/icons/right-thumb.png</file>
<file preprocess="xml-stripblanks">um-history-dialog.ui</file>
</gresource>
</gresources>

View file

@ -201,7 +201,6 @@ panels/user-accounts/data/account-dialog.ui
panels/user-accounts/data/account-fingerprint.ui
panels/user-accounts/data/avatar-chooser.ui
panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in
panels/user-accounts/data/history-dialog.ui
panels/user-accounts/data/join-dialog.ui
panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in
panels/user-accounts/pw-utils.c
@ -209,6 +208,7 @@ panels/user-accounts/run-passwd.c
panels/user-accounts/um-account-dialog.c
panels/user-accounts/um-fingerprint-dialog.c
panels/user-accounts/um-history-dialog.c
panels/user-accounts/um-history-dialog.ui
panels/user-accounts/um-photo-dialog.c
panels/user-accounts/um-realm-manager.c
panels/user-accounts/um-utils.c