diff options
Diffstat (limited to 'capplets/time-admin/src')
-rw-r--r-- | capplets/time-admin/src/Makefile.am | 10 | ||||
-rw-r--r-- | capplets/time-admin/src/main.c | 296 | ||||
-rw-r--r-- | capplets/time-admin/src/org.mate.mcc.ta.gresource.xml | 22 | ||||
-rw-r--r-- | capplets/time-admin/src/time-admin.ui | 365 | ||||
-rw-r--r-- | capplets/time-admin/src/time-share.c | 61 | ||||
-rw-r--r-- | capplets/time-admin/src/time-share.h | 7 | ||||
-rw-r--r-- | capplets/time-admin/src/time-tool.c | 4 | ||||
-rw-r--r-- | capplets/time-admin/src/time-zone.c | 118 |
8 files changed, 571 insertions, 312 deletions
diff --git a/capplets/time-admin/src/Makefile.am b/capplets/time-admin/src/Makefile.am index 59332519..95b930d8 100644 --- a/capplets/time-admin/src/Makefile.am +++ b/capplets/time-admin/src/Makefile.am @@ -2,21 +2,25 @@ cappletname = time-admin bin_PROGRAMS = mate-time-admin +BUILT_SOURCES = mate-time-admin-resources.h mate-time-admin-resources.c +nodist_mate_time_admin_SOURCES = $(BUILT_SOURCES) mate_time_admin_SOURCES = \ main.c time-map.c time-share.c time-tool.c time-zone.c \ time-map.h time-share.h time-tool.h time-zone.h +mate-time-admin-resources.h mate-time-admin-resources.c: org.mate.mcc.ta.gresource.xml Makefile $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies --sourcedir $(srcdir) $(srcdir)/org.mate.mcc.ta.gresource.xml) + $(AM_V_GEN) XMLLINT=$(XMLLINT) $(GLIB_COMPILE_RESOURCES) --target $@ --sourcedir $(srcdir) --generate --c-name time_admin $< + mate_time_admin_LDADD = $(MATECC_CAPPLETS_LIBS) mate_time_admin_LDFLAGS = -export-dynamic AM_CPPFLAGS = \ $(MATECC_CAPPLETS_CFLAGS) \ - -DMATELOCALEDIR="\"$(datadir)/locale\""\ -DTIMPZONEDIR="\"$(datadir)/mate-time-admin/map/\"" -CLEANFILES = $(MATECC_CAPPLETS_CLEANFILES) +CLEANFILES = $(MATECC_CAPPLETS_CLEANFILES) $(BUILT_SOURCES) -EXTRA_DIST = time-zones.h +EXTRA_DIST = time-admin.ui time-zones.h org.mate.mcc.ta.gresource.xml -include $(top_srcdir)/git.mk diff --git a/capplets/time-admin/src/main.c b/capplets/time-admin/src/main.c index 721f0157..bbb960d9 100644 --- a/capplets/time-admin/src/main.c +++ b/capplets/time-admin/src/main.c @@ -25,6 +25,17 @@ #define LOCKFILE "/tmp/time-admin.pid" #define TIME_ADMIN_PERMISSION "org.freedesktop.timedate1.set-time" +static char *translate(const char *value) +{ + g_autofree gchar *zone_translated = NULL; + char *name; + + zone_translated = g_strdup (_(value)); + name = g_strdup_printf (C_("timezone loc", "%s"),zone_translated); + + return name; +} + static gboolean CheckClockHealth(gpointer data) { TimeAdmin *ta = (TimeAdmin *)data; @@ -33,6 +44,7 @@ static gboolean CheckClockHealth(gpointer data) return FALSE; } + static void update_apply_timeout(TimeAdmin *ta) { Update_Clock_Stop(ta); @@ -43,6 +55,7 @@ static void update_apply_timeout(TimeAdmin *ta) } ta->ApplyId = g_timeout_add (10000, (GSourceFunc)CheckClockHealth,ta); } + static void ChangeTimeValue(GtkSpinButton *spin_button, gpointer data) { @@ -62,25 +75,22 @@ static gboolean on_window_quit (GtkWidget *widget, QuitApp(ta); return TRUE; } + static void CloseWindow (GtkButton *button,gpointer data) { TimeAdmin *ta = (TimeAdmin *)data; QuitApp(ta); } + static void UpdatePermission(TimeAdmin *ta) { gboolean is_authorized; is_authorized = g_permission_get_allowed (G_PERMISSION (ta->Permission)); - - gtk_widget_set_sensitive(ta->HourSpin, is_authorized); - gtk_widget_set_sensitive(ta->MinuteSpin, is_authorized); - gtk_widget_set_sensitive(ta->SecondSpin, is_authorized); gtk_widget_set_sensitive(ta->TimeZoneButton, is_authorized); - gtk_widget_set_sensitive(ta->Calendar, is_authorized); - gtk_widget_set_sensitive(ta->SaveButton, is_authorized); gtk_widget_set_sensitive(ta->NtpSyncSwitch, is_authorized); + gtk_widget_set_sensitive(ta->SaveButton, is_authorized); } static void on_permission_changed (GPermission *permission, @@ -93,32 +103,58 @@ static void on_permission_changed (GPermission *permission, static void InitMainWindow(TimeAdmin *ta) { - GtkWidget *Window; - GError *error = NULL; - - Window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - ta->MainWindow = WindowLogin = Window; - gtk_window_set_deletable(GTK_WINDOW(Window),FALSE); - gtk_window_set_resizable(GTK_WINDOW(Window),FALSE); - gtk_window_set_hide_titlebar_when_maximized(GTK_WINDOW(Window),TRUE); - gtk_window_set_position(GTK_WINDOW(Window), GTK_WIN_POS_CENTER); - gtk_window_set_title(GTK_WINDOW(Window),_("Time and Date Manager")); - gtk_container_set_border_width(GTK_CONTAINER(Window),10); - gtk_widget_set_size_request(Window, 300, 360); - g_signal_connect(G_OBJECT(Window), - "delete-event", - G_CALLBACK(on_window_quit), - ta); - gtk_window_set_icon_name (GTK_WINDOW(Window), "preferences-system-time"); - ta->Permission = polkit_permission_new_sync (TIME_ADMIN_PERMISSION, - NULL, - NULL, - &error); + GError *error = NULL; + GtkBuilder *builder; + + builder = gtk_builder_new_from_resource ("/org/mate/mcc/ta/time-admin.ui"); + gtk_builder_add_callback_symbols (builder, + "on_window_quit", G_CALLBACK (on_window_quit), + "on_button1_clicked", G_CALLBACK (RunTimeZoneDialog), + "on_button2_clicked", G_CALLBACK (SaveModifyTime), + "on_button3_clicked", G_CALLBACK (CloseWindow), + "on_spin1_changed", G_CALLBACK (ChangeTimeValue), + "on_spin2_changed", G_CALLBACK (ChangeTimeValue), + "on_spin3_changed", G_CALLBACK (ChangeTimeValue), + "on_switch1_state_set", G_CALLBACK (ChangeNtpSync), + NULL); + gtk_builder_connect_signals (builder, ta); + ta->MainWindow = GTK_WIDGET (gtk_builder_get_object (builder, "window1")); + ta->HourSpin = GTK_WIDGET (gtk_builder_get_object (builder, "spin1")); + ta->MinuteSpin = GTK_WIDGET (gtk_builder_get_object (builder, "spin2")); + ta->SecondSpin = GTK_WIDGET (gtk_builder_get_object (builder, "spin3")); + ta->TimeZoneButton = GTK_WIDGET (gtk_builder_get_object (builder, "button1")); + ta->TimeZoneEntry = GTK_WIDGET (gtk_builder_get_object (builder, "entry1")); + ta->NtpSyncSwitch = GTK_WIDGET (gtk_builder_get_object (builder, "switch1")); + ta->Calendar = GTK_WIDGET (gtk_builder_get_object (builder, "calendar1")); + ta->SaveButton = GTK_WIDGET (gtk_builder_get_object (builder, "button2")); + ta->ButtonLock = GTK_WIDGET (gtk_builder_get_object (builder, "button4")); + g_object_unref (builder); + + /* Make sure that every window gets an icon */ + gtk_window_set_default_icon_name ("preferences-system-time"); + + ta->Permission = polkit_permission_new_sync (TIME_ADMIN_PERMISSION, NULL, NULL, &error); if (ta->Permission == NULL) { g_warning ("Failed to acquire %s: %s", TIME_ADMIN_PERMISSION, error->message); g_error_free (error); } + gtk_lock_button_set_permission(GTK_LOCK_BUTTON (ta->ButtonLock),ta->Permission); + g_signal_connect(ta->Permission, "notify", G_CALLBACK (on_permission_changed), ta); + + struct tm *LocalTime = GetCurrentTime(); + ta->UpdateTimeId = 0; + ta->ApplyId = 0; + Update_Clock_Start(ta); + SetupTimezoneDialog(ta); + const char *TimeZone = GetTimeZone(ta); + char *ZoneName = translate(TimeZone); + gtk_entry_set_text (GTK_ENTRY (ta->TimeZoneEntry), ZoneName); + g_free (ZoneName); + ta->NtpState = GetNtpState(ta); + gtk_switch_set_state (GTK_SWITCH(ta->NtpSyncSwitch), ta->NtpState); + gtk_calendar_mark_day (GTK_CALENDAR(ta->Calendar), LocalTime->tm_mday); + ta->OldDay = LocalTime->tm_mday; } static int RecordPid(void) @@ -127,6 +163,7 @@ static int RecordPid(void) int fd; int Length = 0; char WriteBuf[30] = { 0 }; + fd = open(LOCKFILE,O_WRONLY|O_CREAT|O_TRUNC,0777); if(fd < 0) { @@ -146,6 +183,7 @@ static int RecordPid(void) return 0; } + /****************************************************************************** * Function: ProcessRuning * @@ -194,200 +232,8 @@ static gboolean ProcessRuning(void) ERROREXIT: close(fd); return TRUE; - } -static char *translate(const char *value) -{ - g_autofree gchar *zone_translated = NULL; - char *name; - zone_translated = g_strdup (_(value)); - name = g_strdup_printf (C_("timezone loc", "%s"),zone_translated); - - return name; -} -static GtkWidget * TimeZoneAndNtp(TimeAdmin *ta) -{ - GtkWidget *table; - GtkWidget *TimeZoneLabel; - GtkWidget *NtpSyncLabel; - const char *TimeZone; - gboolean NtpState; - char *ZoneName; - - table = gtk_grid_new(); - gtk_grid_set_column_homogeneous(GTK_GRID(table),TRUE); - - TimeZoneLabel = gtk_label_new (_("Time Zone:")); - gtk_widget_set_halign(TimeZoneLabel,GTK_ALIGN_START); - gtk_grid_attach(GTK_GRID(table) ,TimeZoneLabel, 0 , 0 , 1 , 1); - - SetupTimezoneDialog(ta); - TimeZone = GetTimeZone(ta); - ZoneName = translate(TimeZone); - ta->TimeZoneButton = gtk_button_new_with_label(ZoneName); - g_signal_connect (ta->TimeZoneButton, - "clicked", - G_CALLBACK (RunTimeZoneDialog), - ta); - - gtk_grid_attach(GTK_GRID(table) ,ta->TimeZoneButton,1 , 0 , 3 , 1); - - NtpSyncLabel = gtk_label_new (_("Ntp Sync:")); - gtk_widget_set_halign(NtpSyncLabel,GTK_ALIGN_START); - gtk_grid_attach(GTK_GRID(table) ,NtpSyncLabel, 0 , 1 , 1 , 1); - - ta->NtpSyncSwitch = gtk_switch_new(); - NtpState = GetNtpState(ta); - ta->NtpState = NtpState; - gtk_switch_set_state (GTK_SWITCH(ta->NtpSyncSwitch), - NtpState); - gtk_grid_attach(GTK_GRID(table) ,ta->NtpSyncSwitch, 1 , 1 , 1 , 1); - g_signal_connect (G_OBJECT(ta->NtpSyncSwitch), - "state-set", - G_CALLBACK (ChangeNtpSync), - ta); - - gtk_grid_set_row_spacing(GTK_GRID(table), 6); - gtk_grid_set_column_spacing(GTK_GRID(table), 12); - - return table; - -} - -static GtkWidget *GetSpinButton(int Initial,int Maximum,TimeAdmin *ta) -{ - GtkWidget *SpinButton; - GtkAdjustment *Adjustment; - - Adjustment = gtk_adjustment_new (Initial, 0, Maximum, 1, 0, 0); - SpinButton = gtk_spin_button_new (Adjustment, 1, 0); - gtk_widget_set_sensitive(SpinButton,!ta->NtpState); - gtk_widget_set_halign(SpinButton,GTK_ALIGN_START); - gtk_spin_button_set_wrap(GTK_SPIN_BUTTON (SpinButton), TRUE); - gtk_spin_button_set_numeric(GTK_SPIN_BUTTON (SpinButton),TRUE); - gtk_widget_set_hexpand (SpinButton,TRUE); - g_signal_connect (SpinButton, - "changed", - G_CALLBACK (ChangeTimeValue), - ta); - - SetTooltip(SpinButton,!ta->NtpState); - return SpinButton; -} -static GtkWidget *SetClock(TimeAdmin *ta) -{ - GtkWidget *table; - GtkWidget *TimeLabel; - struct tm *LocalTime; - - table = gtk_grid_new(); - gtk_grid_set_column_homogeneous(GTK_GRID(table),TRUE); - - TimeLabel = gtk_label_new (_("Set Time")); - gtk_widget_set_halign(TimeLabel,GTK_ALIGN_CENTER); - gtk_widget_set_valign(TimeLabel,GTK_ALIGN_START); - gtk_widget_set_hexpand(TimeLabel,FALSE); - gtk_grid_attach(GTK_GRID(table) ,TimeLabel, 1 , 0 , 1 , 1); - - LocalTime = GetCurrentTime(); - ta->UpdateTimeId = 0; - ta->ApplyId = 0; - - ta->HourSpin = GetSpinButton(LocalTime->tm_hour,23,ta); - gtk_grid_attach(GTK_GRID(table) ,ta->HourSpin, 0 , 1 , 1 , 1); - - ta->MinuteSpin = GetSpinButton(LocalTime->tm_min,59,ta); - gtk_grid_attach(GTK_GRID(table) ,ta->MinuteSpin, 1 , 1 , 1 , 1); - - ta->SecondSpin = GetSpinButton (LocalTime->tm_sec,59,ta); - gtk_grid_attach(GTK_GRID(table) ,ta->SecondSpin, 2 , 1 , 1 , 1); - - Update_Clock_Start(ta); - - gtk_grid_set_row_spacing(GTK_GRID(table), 6); - gtk_grid_set_column_spacing(GTK_GRID(table), 12); - - return table; -} - -static GtkWidget *SetDate(TimeAdmin *ta) -{ - GtkWidget *table, *image, *DateLabel; - struct tm *LocalTime; - - table = gtk_grid_new(); - gtk_grid_set_column_homogeneous (GTK_GRID(table), TRUE); - - DateLabel = gtk_label_new (_("Set Date")); - gtk_grid_attach(GTK_GRID(table) ,DateLabel, 1 , 0 , 2 , 2); - - LocalTime = GetCurrentTime (); - ta->Calendar = gtk_calendar_new (); - gtk_widget_set_sensitive (ta->Calendar, !ta->NtpState); - SetTooltip (ta->Calendar, !ta->NtpState); - gtk_calendar_mark_day (GTK_CALENDAR(ta->Calendar), LocalTime->tm_mday); - ta->OldDay = LocalTime->tm_mday; - gtk_grid_attach (GTK_GRID(table), ta->Calendar, 0, 2, 4, 3); - - ta->CloseButton = gtk_button_new_with_label (_("_Close")); - image = gtk_image_new_from_icon_name ("gtk-close", GTK_ICON_SIZE_BUTTON); - gtk_button_set_image (GTK_BUTTON (ta->CloseButton), image); - gtk_button_set_use_underline (GTK_BUTTON(ta->CloseButton), TRUE); - gtk_style_context_add_class (gtk_widget_get_style_context (ta->CloseButton), "text-button"); - gtk_grid_attach (GTK_GRID(table), ta->CloseButton, 3, 5, 1, 1); - g_signal_connect (ta->CloseButton, - "clicked", - G_CALLBACK (CloseWindow), - ta); - - if (ta->Permission) - { - ta->ButtonLock = gtk_lock_button_new (ta->Permission); - gtk_lock_button_set_permission (GTK_LOCK_BUTTON (ta->ButtonLock),ta->Permission); - gtk_grid_attach (GTK_GRID(table), ta->ButtonLock, 0, 5, 1, 1); - g_signal_connect (ta->Permission, - "notify", - G_CALLBACK (on_permission_changed), - ta); - } - - ta->SaveButton = gtk_button_new_with_label (_("_Save")); - image = gtk_image_new_from_icon_name ("gtk-save", GTK_ICON_SIZE_BUTTON); - gtk_button_set_image (GTK_BUTTON (ta->SaveButton), image); - gtk_button_set_use_underline (GTK_BUTTON(ta->SaveButton), TRUE); - gtk_style_context_add_class (gtk_widget_get_style_context (ta->SaveButton), "text-button"); - gtk_widget_set_sensitive (ta->SaveButton, !ta->NtpState); - gtk_grid_attach (GTK_GRID(table), ta->SaveButton, 2, 5, 1, 1); - g_signal_connect (ta->SaveButton, - "clicked", - G_CALLBACK (SaveModifyTime), - ta); - - gtk_grid_set_row_spacing (GTK_GRID(table), 6); - gtk_grid_set_column_spacing (GTK_GRID(table), 12); - - return table; -} - -static void CreateClockInterface(TimeAdmin *ta) -{ - GtkWidget *Vbox; - GtkWidget *Vbox1; - GtkWidget *Vbox2; - GtkWidget *Vbox3; - - Vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8); - gtk_container_add(GTK_CONTAINER(ta->MainWindow), Vbox); - - Vbox1 = TimeZoneAndNtp(ta); - gtk_box_pack_start(GTK_BOX(Vbox),Vbox1,TRUE,TRUE,8); - - Vbox2 = SetClock(ta); - gtk_box_pack_start(GTK_BOX(Vbox),Vbox2,TRUE,TRUE,8); - Vbox3 = SetDate(ta); - gtk_box_pack_start(GTK_BOX(Vbox),Vbox3,TRUE,TRUE,8); -} static gboolean InitDbusProxy(TimeAdmin *ta) { GError *error = NULL; @@ -424,18 +270,16 @@ int main(int argc, char **argv) capplet_init (NULL, &argc, &argv); - /* Create the main window */ - InitMainWindow(&ta); - /* Check whether the process has been started */ if(ProcessRuning() == TRUE) exit(0); if(InitDbusProxy(&ta) == FALSE) - { exit(0); - } - CreateClockInterface(&ta); - UpdatePermission(&ta); + + /* Create the main window */ + InitMainWindow(&ta); + + UpdatePermission(&ta); gtk_widget_show_all(ta.MainWindow); gtk_main(); diff --git a/capplets/time-admin/src/org.mate.mcc.ta.gresource.xml b/capplets/time-admin/src/org.mate.mcc.ta.gresource.xml new file mode 100644 index 00000000..44a6c03b --- /dev/null +++ b/capplets/time-admin/src/org.mate.mcc.ta.gresource.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + This file is part of MATE Control Center. + + MATE Control Center 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 2 of the License, or + (at your option) any later version. + + MATE Control Center 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 MATE Control Center. If not, see <http://www.gnu.org/licenses/>. +--> +<gresources> + <gresource prefix="/org/mate/mcc/ta"> + <file compressed="true">time-admin.ui</file> + </gresource> +</gresources> diff --git a/capplets/time-admin/src/time-admin.ui b/capplets/time-admin/src/time-admin.ui new file mode 100644 index 00000000..7539d2cc --- /dev/null +++ b/capplets/time-admin/src/time-admin.ui @@ -0,0 +1,365 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.22.1 --> +<interface> + <requires lib="gtk+" version="3.20"/> + <object class="GtkAdjustment" id="adjustament1"> + <property name="upper">23</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustament2"> + <property name="upper">59</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustament3"> + <property name="upper">59</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkApplicationWindow" id="window1"> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Time and Date Manager</property> + <property name="resizable">False</property> + <property name="window_position">center</property> + <property name="icon_name">preferences-system-time</property> + <signal name="delete-event" handler="on_window_quit" swapped="no"/> + <child> + <placeholder/> + </child> + <child> + <object class="GtkBox" id="box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">12</property> + <property name="margin_right">12</property> + <property name="margin_top">12</property> + <property name="margin_bottom">6</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="left_padding">12</property> + <child> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">NTP sync</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkSwitch" id="switch1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="halign">start</property> + <signal name="state-set" handler="on_switch1_state_set" swapped="no"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Time zone</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkEntry" id="entry1"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="editable">False</property> + <property name="max_width_chars">25</property> + <property name="caps_lock_warning">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button1"> + <property name="label">gtk-edit</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + <property name="always_show_image">True</property> + <signal name="clicked" handler="on_button1_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Preferences</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">12</property> + <property name="margin_right">12</property> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="left_padding">12</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="spacing">12</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkSpinButton" id="spin1"> + <property name="visible">True</property> + <property name="sensitive" bind-source="button2" bind-property="sensitive"/> + <property name="can_focus">True</property> + <property name="max_length">2</property> + <property name="caps_lock_warning">False</property> + <property name="input_purpose">digits</property> + <property name="adjustment">adjustament1</property> + <signal name="changed" handler="on_spin1_changed" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spin2"> + <property name="visible">True</property> + <property name="sensitive" bind-source="button2" bind-property="sensitive"/> + <property name="can_focus">True</property> + <property name="max_length">2</property> + <property name="caps_lock_warning">False</property> + <property name="input_purpose">digits</property> + <property name="adjustment">adjustament2</property> + <signal name="changed" handler="on_spin2_changed" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spin3"> + <property name="visible">True</property> + <property name="sensitive" bind-source="button2" bind-property="sensitive"/> + <property name="can_focus">True</property> + <property name="max_length">2</property> + <property name="caps_lock_warning">False</property> + <property name="progress_pulse_step">1</property> + <property name="input_purpose">digits</property> + <property name="adjustment">adjustament3</property> + <signal name="changed" handler="on_spin3_changed" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Time</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">12</property> + <property name="margin_right">12</property> + <property name="margin_top">6</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + <property name="left_padding">12</property> + <child> + <object class="GtkCalendar" id="calendar1"> + <property name="visible">True</property> + <property name="sensitive" bind-source="button2" bind-property="sensitive"/> + <property name="can_focus">True</property> + <property name="year">2019</property> + <property name="month">5</property> + <property name="day">20</property> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Date</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButtonBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="margin_left">18</property> + <property name="margin_right">18</property> + <property name="margin_top">18</property> + <property name="margin_bottom">18</property> + <property name="spacing">12</property> + <property name="layout_style">end</property> + <child> + <object class="GtkLockButton" id="button4"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="margin_right">18</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button2"> + <property name="label">gtk-save</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + <signal name="clicked" handler="on_button2_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button3"> + <property name="label">gtk-close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + <signal name="clicked" handler="on_button3_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + </child> + </object> +</interface> diff --git a/capplets/time-admin/src/time-share.c b/capplets/time-admin/src/time-share.c index 379134e3..b5038779 100644 --- a/capplets/time-admin/src/time-share.c +++ b/capplets/time-admin/src/time-share.c @@ -22,18 +22,20 @@ #include <glib/gi18n.h> /****************************************************************************** -* Function: MessageReport -* -* Explain: Prompt information dialog -* -* Input: @Title Message title -* @Msg Message content -* @nType Message type -* Output: -* -* Author: zhuyaliang 25/05/2018 -******************************************************************************/ -int MessageReport(const char *Title,const char *Msg,int nType) + * Function: MessageReport + * + * Explain: Prompt information dialog + * + * Input: @Title Message title + * @Msg Message content + * @nType Message type + * Output: + * + * Author: zhuyaliang 25/05/2018 + ******************************************************************************/ +int MessageReport(const char *Title, + const char *Msg, + int nType) { GtkWidget *dialog = NULL; int nRet; @@ -42,49 +44,49 @@ int MessageReport(const char *Title,const char *Msg,int nType) { case ERROR: { - dialog = gtk_message_dialog_new(GTK_WINDOW(WindowLogin), - GTK_DIALOG_DESTROY_WITH_PARENT, + dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, - "%s",Title); + "%s", Title); break; } case WARING: { - dialog = gtk_message_dialog_new(GTK_WINDOW(WindowLogin), - GTK_DIALOG_DESTROY_WITH_PARENT, + dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, - "%s",Title); + "%s", Title); break; } case INFOR: { - dialog = gtk_message_dialog_new(GTK_WINDOW(WindowLogin), - GTK_DIALOG_DESTROY_WITH_PARENT, + dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, - "%s",Title); + "%s", Title); break; } case QUESTION: { - dialog = gtk_message_dialog_new(GTK_WINDOW(WindowLogin), - GTK_DIALOG_DESTROY_WITH_PARENT, + dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - "%s",Title); + "%s", Title); gtk_dialog_add_button (GTK_DIALOG (dialog),("_Return"), GTK_RESPONSE_ACCEPT); break; } case QUESTIONNORMAL: { - dialog = gtk_message_dialog_new(GTK_WINDOW(WindowLogin), - GTK_DIALOG_DESTROY_WITH_PARENT, + dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - "%s",Title); + "%s", Title); break; } default : @@ -102,13 +104,10 @@ int MessageReport(const char *Title,const char *Msg,int nType) void QuitApp(TimeAdmin *ta) { if(ta->UpdateTimeId > 0) - { g_source_remove (ta->UpdateTimeId); - } + if(ta->ApplyId > 0) - { g_source_remove(ta->ApplyId); - } gtk_main_quit(); } diff --git a/capplets/time-admin/src/time-share.h b/capplets/time-admin/src/time-share.h index 1a842e1c..346944be 100644 --- a/capplets/time-admin/src/time-share.h +++ b/capplets/time-admin/src/time-share.h @@ -40,8 +40,7 @@ #define QUESTIONNORMAL 5 -GtkWidget *WindowLogin; -int TimeoutFlag; +int TimeoutFlag; typedef struct { GtkWidget *MainWindow; @@ -49,9 +48,9 @@ typedef struct GtkWidget *MinuteSpin; GtkWidget *SecondSpin; GtkWidget *TimeZoneButton; + GtkWidget *TimeZoneEntry; GtkWidget *NtpSyncSwitch; GtkWidget *Calendar; - GtkWidget *CloseButton; GtkWidget *SaveButton; int UpdateTimeId; int ApplyId; @@ -67,7 +66,7 @@ typedef struct GtkWidget *map; GtkListStore *CityListStore; GtkTreeModelSort *CityModelSort; - GtkWidget *ButtonLock; + GtkWidget *ButtonLock; GPermission *Permission; }TimeAdmin; diff --git a/capplets/time-admin/src/time-tool.c b/capplets/time-admin/src/time-tool.c index 0029f3bb..a5e13f03 100644 --- a/capplets/time-admin/src/time-tool.c +++ b/capplets/time-admin/src/time-tool.c @@ -191,13 +191,9 @@ static void ChangeSpinBttonState(TimeAdmin *ta,gboolean State) { gtk_widget_set_sensitive(ta->SaveButton,!State); SetTooltip(ta->SaveButton,!ta->NtpState); - gtk_widget_set_sensitive(ta->HourSpin, !State); SetTooltip(ta->HourSpin,!ta->NtpState); - gtk_widget_set_sensitive(ta->MinuteSpin,!State); SetTooltip(ta->MinuteSpin,!ta->NtpState); - gtk_widget_set_sensitive(ta->SecondSpin,!State); SetTooltip(ta->SecondSpin,!ta->NtpState); - gtk_widget_set_sensitive(ta->Calendar, !State); SetTooltip(ta->Calendar,!ta->NtpState); } diff --git a/capplets/time-admin/src/time-zone.c b/capplets/time-admin/src/time-zone.c index e6106f1b..713314cf 100644 --- a/capplets/time-admin/src/time-zone.c +++ b/capplets/time-admin/src/time-zone.c @@ -41,17 +41,21 @@ #include <libmate-desktop/mate-languages.h> - #define DEFAULT_TZ "Europe/London" #define BACKFILE "/usr/share/mate-time-admin/map/backward" + static void LocationChanged(TimezoneMap *map, - TzLocation *location,TimeAdmin *ta); + TzLocation *location, + TimeAdmin *ta); + enum { CITY_COL_CITY_HUMAN_READABLE, CITY_COL_ZONE, CITY_NUM_COLS }; -static gchar *tz_data_file_get (void) + +static gchar* +tz_data_file_get (void) { gchar *file; @@ -60,25 +64,31 @@ static gchar *tz_data_file_get (void) return file; } -static float convert_pos (gchar *pos, int digits) +static float +convert_pos (gchar *pos, int digits) { - gchar whole[10]; - gchar *fraction; + gchar whole[10], *fraction; gint i; float t1, t2; - if (!pos || strlen(pos) < 4 || digits > 9) return 0.0; + if (!pos || strlen(pos) < 4 || digits > 9) + return 0.0; + + for (i = 0; i < digits + 1; i++) + whole[i] = pos[i]; - for (i = 0; i < digits + 1; i++) whole[i] = pos[i]; whole[i] = '\0'; fraction = pos + digits + 1; t1 = g_strtod (whole, NULL); t2 = g_strtod (fraction, NULL); - if (t1 >= 0.0) return t1 + t2/pow (10.0, strlen(fraction)); - else return t1 - t2/pow (10.0, strlen(fraction)); + if (t1 >= 0.0) + return t1 + t2/pow (10.0, strlen(fraction)); + else + return t1 - t2/pow (10.0, strlen(fraction)); } + static int compare_country_names (const void *a, const void *b) { const TzLocation *tza = * (TzLocation **) a; @@ -174,14 +184,16 @@ TzDB *tz_load_db (void) gchar *p; TzLocation *loc; - if (*buf == '#') continue; + if (*buf == '#') + continue; g_strchomp(buf); tmpstrarr = g_strsplit(buf,"\t", 6); latstr = g_strdup (tmpstrarr[1]); p = latstr + 1; - while (*p != '-' && *p != '+') p++; + while (*p != '-' && *p != '+') + p++; lngstr = g_strdup (p); *p = '\0'; @@ -195,7 +207,8 @@ TzDB *tz_load_db (void) if (tmpstrarr[3] && *tmpstrarr[3] == '-' && tmpstrarr[4]) loc->comment = g_strdup (tmpstrarr[4]); - if (tmpstrarr[3] && *tmpstrarr[3] != '-' && !islower(loc->zone)) { + if (tmpstrarr[3] && *tmpstrarr[3] != '-' && !islower(loc->zone)) + { TzLocation *locgrp; locgrp = g_new0 (TzLocation, 1); locgrp->country = g_strdup (tmpstrarr[0]); @@ -224,7 +237,8 @@ TzDB *tz_load_db (void) return tz_db; } -static GtkWidget *GetTimeZoneMap(TimeAdmin *ta) +static GtkWidget* +GetTimeZoneMap(TimeAdmin *ta) { GtkWidget *map; g_autoptr(GtkEntryCompletion) completion = NULL; @@ -240,7 +254,6 @@ static GtkWidget *GetTimeZoneMap(TimeAdmin *ta) gtk_entry_completion_set_model (completion, GTK_TREE_MODEL (ta->CityListStore)); gtk_entry_completion_set_text_column (completion, CITY_COL_CITY_HUMAN_READABLE); - return map; } static char * @@ -305,13 +318,14 @@ update_timezone (TimezoneMap *map) g_date_time_unref(date); } -static void LocationChanged(TimezoneMap *map, - TzLocation *location, - TimeAdmin *ta) +static void +LocationChanged(TimezoneMap *map, + TzLocation *location, + TimeAdmin *ta) { - update_timezone (map); } + static void get_initial_timezone (TimeAdmin *ta) { @@ -327,8 +341,10 @@ get_initial_timezone (TimeAdmin *ta) } update_timezone (TIMEZONEMAP(ta->map)); } -static void LoadCities (TzLocation *loc, - GtkListStore *CityStore) + +static void +LoadCities (TzLocation *loc, + GtkListStore *CityStore) { g_autofree gchar *human_readable = NULL; @@ -340,20 +356,22 @@ static void LoadCities (TzLocation *loc, human_readable, CITY_COL_ZONE, loc->zone, - -1); + -1); } -static void CreateCityList(TimeAdmin *ta) +static void +CreateCityList(TimeAdmin *ta) { TzDB *db; ta->CityListStore = gtk_list_store_new (CITY_NUM_COLS,G_TYPE_STRING,G_TYPE_STRING); - db = tz_load_db (); g_ptr_array_foreach (db->locations, (GFunc) LoadCities, ta->CityListStore); TimeZoneDateBaseFree(db); } -static GtkWidget *CreateZoneFrame(TimeAdmin *ta) + +static GtkWidget* +CreateZoneFrame(TimeAdmin *ta) { GtkWidget *TimeZoneFrame; @@ -363,19 +381,26 @@ static GtkWidget *CreateZoneFrame(TimeAdmin *ta) return TimeZoneFrame; } -static GtkWidget *CreateZoneScrolled(TimeAdmin *ta) + +static GtkWidget* +CreateZoneScrolled(TimeAdmin *ta) { GtkWidget *Scrolled; + Scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (Scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (Scrolled), GTK_SHADOW_IN); return Scrolled; } -static void CreateZoneEntry(TimeAdmin *ta) + +static void +CreateZoneEntry(TimeAdmin *ta) { GtkWidget *hbox; @@ -390,13 +415,13 @@ static void CreateZoneEntry(TimeAdmin *ta) gtk_search_bar_set_show_close_button (GTK_SEARCH_BAR (ta->SearchBar),FALSE); gtk_container_add (GTK_CONTAINER (ta->SearchBar), hbox); gtk_search_bar_set_search_mode(GTK_SEARCH_BAR(ta->SearchBar),TRUE); - } -static gboolean CityChanged(GtkEntryCompletion *completion, - GtkTreeModel *model, - GtkTreeIter *iter, - TimeAdmin *self) +static gboolean +CityChanged(GtkEntryCompletion *completion, + GtkTreeModel *model, + GtkTreeIter *iter, + TimeAdmin *self) { GtkWidget *entry; g_autofree gchar *zone = NULL; @@ -413,22 +438,22 @@ static gboolean CityChanged(GtkEntryCompletion *completion, return TRUE; } -static void ChoooseTimezoneDone (GtkWidget *widget, - TimeAdmin *ta) + +static void +ChoooseTimezoneDone (GtkWidget *widget, + TimeAdmin *ta) { TimezoneMap *map; - g_autofree gchar *ZoneCity = NULL; map = TIMEZONEMAP(ta->map); SetTimeZone(ta->proxy,map->location->zone); - - ZoneCity = translated_city_name(map->location); - gtk_button_set_label((GTK_BUTTON(ta->TimeZoneButton)),ZoneCity); + gtk_entry_set_text (GTK_ENTRY (ta->TimeZoneEntry), _(map->location->zone)); gtk_widget_hide_on_delete(GTK_WIDGET(ta->dialog)); } -static void ChoooseTimezoneClose(GtkWidget *widget, - TimeAdmin *ta) +static void +ChoooseTimezoneClose(GtkWidget *widget, + TimeAdmin *ta) { gtk_widget_hide_on_delete(GTK_WIDGET(ta->dialog)); } @@ -443,8 +468,6 @@ void SetupTimezoneDialog(TimeAdmin *ta) NULL, NULL); gtk_window_set_default_size (GTK_WINDOW (ta->dialog), 730, 520); - gtk_window_set_icon_name (GTK_WINDOW(ta->dialog), "preferences-system-time"); - ta->TZclose = gtk_button_new_with_mnemonic (_("_Close")); image = gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_BUTTON); @@ -498,6 +521,7 @@ void SetupTimezoneDialog(TimeAdmin *ta) TRUE, TRUE, 8); } + void tz_info_free (TzInfo *tzinfo) { g_return_if_fail (tzinfo != NULL); @@ -506,6 +530,7 @@ void tz_info_free (TzInfo *tzinfo) if (tzinfo->tzname_daylight) g_free (tzinfo->tzname_daylight); g_free (tzinfo); } + struct { const char *orig; const char *dest; @@ -533,9 +558,10 @@ struct { { "MST", "America/Denver" }, /* Other name for the mountain tz */ { "MST7MDT", "America/Denver" }, /* ditto */ }; + static gboolean compare_timezones (const char *a, - const char *b) + const char *b) { if (g_str_equal (a, b)) return TRUE; @@ -639,6 +665,7 @@ TzInfo *tz_info_from_location (TzLocation *loc) return tzinfo; } + glong tz_location_get_utc_offset (TzLocation *loc) { TzInfo *tz_info; @@ -650,6 +677,7 @@ glong tz_location_get_utc_offset (TzLocation *loc) return offset; } + void RunTimeZoneDialog (GtkButton *button, gpointer data) { @@ -657,15 +685,16 @@ void RunTimeZoneDialog (GtkButton *button, gtk_widget_show_all(GTK_WIDGET(ta->dialog)); } + static void tz_location_free (TzLocation *loc, gpointer data) { g_free (loc->country); g_free (loc->zone); g_free (loc->comment); - g_free (loc); } + void TimeZoneDateBaseFree (TzDB *db) { g_ptr_array_foreach (db->locations, (GFunc) tz_location_free, NULL); @@ -673,6 +702,7 @@ void TimeZoneDateBaseFree (TzDB *db) g_hash_table_destroy (db->backward); g_free (db); } + GPtrArray *tz_get_locations (TzDB *db) { return db->locations; |