GNOME Bugzilla – Bug 22405
set custom time format
Last modified: 2004-12-22 21:47:04 UTC
Package: gnome-core Severity: normal Version: 1.2.1 Synopsis: panel clock "improvement" code... Class: support Distribution: Red Hat Linux release 6.2 (Zoot) System: Linux 2.2.14-5.0 i686 unknown C library: glibc-2.1.3-15 C compiler: egcs-2.91.66 glib: 1.2.8 GTK+: 1.2.8 ORBit: ORBit 0.5.3 gnome-libs: gnome-libs 1.2.4 libxml: 1.8.9 gnome-print: gnome-print-0.20-0_helix_1 gnome-core: gnome-core 1.2.1 Description: I'm so stupid, I can't figure out any other way to send "you" foax code. Here's a so-called improvement for gnome-core/applets/gen_util/clock.c which implements customized formatting via strftime & font selection (or not, defaults are restorable). I tried to keep it as "lightweight" as possible, but as I havn't got a clue how most of these functions work it was more trial and error (that's why, e.g., I ditched the "table" calls in setting up the properties page). If you could at least let me know to stop bothering you..... Mike --- Included file --- /* * GNOME time/date display module. * (C) 1997 The Free Software Foundation * * Authors: Miguel de Icaza * Federico Mena * Stuart Parmenter * * Feel free to implement new look and feels :-) * I tried: Mike Capell */ #include <stdio.h> #include <config.h> #include <sys/stat.h> #include <unistd.h> #include <dirent.h> #include <string.h> #include <time.h> #include <gnome.h> #include <gdk/gdkx.h> #include <libgnomeui/gnome-window-icon.h> #include <applet-widget.h> #include "clock.h" typedef struct _ClockData ClockData; typedef void (*ClockUpdateFunc) (ClockData *, time_t); struct _ClockData { GtkWidget *applet; GtkWidget *clockw; int timeout; int timeouttime; int hourformat; gboolean showdate; gboolean unixtime; gboolean gmt_time; gboolean showtooltip; ClockUpdateFunc update_func; PanelOrientType orient; int size; gboolean use_custom_fmt; char *custom_fmt; gboolean use_custom_font; char *custom_font; GtkWidget *props; int prop_hourformat; int prop_showdate; int prop_unixtime; int prop_gmt_time; int prop_showtooltip; int prop_use_custom_fmt; char *prop_custom_fmt; int prop_use_custom_font; char *prop_custom_font; GtkWidget *font_entry; }; #define DEFAULT_CUSTOM_FMT "%a %d %b%n%H:%M" #define DEFAULT_CUSTOM_FONT "-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-1" typedef struct { GtkWidget *time; /*the time label*/ GtkWidget *align; /* Needed for changing the padding */ } ComputerClock; static void clock_properties (AppletWidget *applet, gpointer data); static void clock_about (AppletWidget *applet, gpointer data); static void help_cb (GtkWidget *w, gpointer data); static void phelp_cb (GtkWidget *w, gint tab, gpointer data); static void free_data(GtkWidget * widget, gpointer data) { g_free(data); } static int clock_timeout_callback(gpointer data) { ClockData *cd = data; time_t current_time; time(¤t_time); (*cd->update_func) (cd, current_time); if(cd->unixtime) { if (cd->timeouttime != 1000) { cd->timeouttime = 1000; cd->timeout = gtk_timeout_add(cd->timeouttime, clock_timeout_callback, cd); return FALSE; } } else { if (cd->timeouttime != 36000) { cd->timeouttime = 36000; cd->timeout = gtk_timeout_add(cd->timeouttime, clock_timeout_callback, cd); return FALSE; } } return TRUE; } static gboolean applet_save_session(GtkWidget * w, const char *privcfgpath, const char *globcfgpath, gpointer data) { ClockData *cd = data; gnome_config_push_prefix(privcfgpath); gnome_config_set_int("clock/hourformat", cd->hourformat); gnome_config_set_int("clock/showdate", cd->showdate); gnome_config_set_int("clock/unixtime", cd->unixtime); gnome_config_set_int("clock/showtooltip", cd->showtooltip); gnome_config_set_int("clock/gmt_time", cd->gmt_time); gnome_config_set_int("clock/use_custom_fmt", cd->use_custom_fmt); gnome_config_set_string("clock/custom_fmt", cd->custom_fmt ? cd->custom_fmt : DEFAULT_CUSTOM_FMT ); gnome_config_set_int("clock/use_custom_font", cd->use_custom_font); gnome_config_set_string("clock/custom_font", cd->custom_font ? cd->custom_font : DEFAULT_CUSTOM_FONT ); gnome_config_pop_prefix(); gnome_config_sync(); gnome_config_drop_all(); return FALSE; } static void computer_clock_update_func(ClockData * cd, time_t current_time) { ComputerClock *cc; struct tm *tm; GString *gs = g_string_new(""); char date[20], hour[20], tooltip[30]; cc = gtk_object_get_user_data(GTK_OBJECT(cd->clockw)); if (cd->gmt_time) tm = gmtime(¤t_time); else tm = localtime(¤t_time); if (cd->unixtime) { if ((cd->orient == ORIENT_LEFT || cd->orient == ORIENT_RIGHT) && cd->size >= PIXEL_SIZE_STANDARD) { g_snprintf(hour,20,"%lu\n%lu", (unsigned long)(current_time/100000L), (unsigned long)(current_time%100000L)); } else { g_snprintf(hour,20,"%lu",(unsigned long)current_time); } g_string_append(gs,hour); } else { if (cd->use_custom_fmt) { char s[128]; char l = sizeof(s); if(cd->custom_fmt){ if (strftime(s, l, cd->custom_fmt,tm) == l) s[l-1] = '\0'; g_string_append(gs, s); } else g_string_append(gs, "Ouch"); } else { if (cd->hourformat == 0) { /* This format string is used, to display the actual time in 12 hour format. */ if ( (cd->orient == ORIENT_LEFT || cd->orient == ORIENT_RIGHT) && cd->size >= PIXEL_SIZE_STANDARD) { if (strftime(hour, 20, _("%I:%M\n%p"), tm) == 20) hour[19] = '\0'; } else { if (strftime(hour, 20, _("%I:%M %p"), tm) == 20) hour[19] = '\0'; } g_string_append(gs,hour); } else if (cd->hourformat == 1) { /* This format string is used, to display the actual time in 24 hour format. */ if (strftime(hour, 20, _("%H:%M"), tm) == 20) hour[19] = '\0'; g_string_append(gs,hour); } else { g_string_append(gs,"Oops"); } if (cd->showdate) { if ((cd->orient == ORIENT_LEFT || cd->orient == ORIENT_RIGHT) && cd->size >= PIXEL_SIZE_STANDARD) { /* This format string is used, to display the actual day, when showing a vertical panel. For an explanation of this format string type 'man strftime'. */ if (strftime(date, 20, _("%a\n%b %d"), tm) == 20) date[19] = '\0'; } else { /* This format string is used, to display the actual day, when showing a horizontal panel. */ if (strftime(date, 20, _("%a %b %d"), tm) == 20) date[19] = '\0'; } if(cd->size < PIXEL_SIZE_STANDARD) g_string_append_c(gs,' '); else g_string_append_c(gs,'\n'); g_string_append(gs,date); } } /* Set the applets tooltip */ if (cd->showtooltip) { if (strftime(tooltip, 30, _("%A, %B %d"), tm) == 30) date[29] = '\0'; applet_widget_set_tooltip(APPLET_WIDGET(cd->applet), tooltip); } } /*if we are vertical and narrow, just make it char per line*/ if ((cd->orient == ORIENT_LEFT || cd->orient == ORIENT_RIGHT) && cd->size < PIXEL_SIZE_STANDARD) { char *p; GString *gst = g_string_new(""); for(p=gs->str;*p;p++) { if(p!=gs->str) g_string_append_c(gst,'\n'); g_string_append_c(gst,*p); } g_string_free(gs,TRUE); gs = gst; } gtk_label_set_text(GTK_LABEL(cc->time), gs->str); applet_widget_queue_resize(APPLET_WIDGET(cd->applet)); g_string_free(gs,TRUE); } static void create_computer_clock_widget(GtkWidget ** clock, ClockUpdateFunc * update_func) { GtkWidget *frame; GtkWidget *vbox; ComputerClock *cc; frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); gtk_widget_show(frame); cc = g_new(ComputerClock, 1); cc->align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0); gtk_container_set_border_width(GTK_CONTAINER(cc->align), 3); gtk_container_add(GTK_CONTAINER(frame), cc->align); gtk_widget_show(cc->align); vbox = gtk_vbox_new(FALSE, FALSE); gtk_container_add(GTK_CONTAINER(cc->align), vbox); gtk_widget_show(vbox); cc->time = gtk_label_new("hmm?"); gtk_box_pack_start_defaults(GTK_BOX(vbox), cc->time); gtk_widget_show(cc->time); gtk_object_set_user_data(GTK_OBJECT(frame), cc); gtk_signal_connect(GTK_OBJECT(frame), "destroy", (GtkSignalFunc) free_data, cc); *clock = frame; *update_func = computer_clock_update_func; } static void destroy_clock(GtkWidget * widget, gpointer data) { ClockData *cd = data; gtk_timeout_remove(cd->timeout); if(cd->props) gtk_widget_destroy(cd->props); g_free(cd); } static void create_clock_widget(ClockData *cd, GtkWidget * applet) { GtkWidget *clock; struct tm *tm; time_t current_time; /*FIXME: different clock types here */ create_computer_clock_widget(&clock, &cd->update_func); cd->clockw = clock; cd->applet = applet; cd->props = NULL; cd->orient = ORIENT_UP; cd->size = PIXEL_SIZE_STANDARD; gtk_signal_connect(GTK_OBJECT(clock), "destroy", (GtkSignalFunc) destroy_clock, cd); /* Call the clock's update function so that it paints its first state */ time(¤t_time); (*cd->update_func) (cd, current_time); /* Install timeout handler */ if (cd->gmt_time) tm = gmtime(¤t_time); else tm = localtime(¤t_time); if(cd->unixtime) cd->timeouttime = 1000; else cd->timeouttime = 36000-(tm->tm_sec*600); cd->timeout = gtk_timeout_add(cd->timeouttime, clock_timeout_callback, cd); } /*these are commands sent over corba: */ /*this is when the panel orientation changes */ static void applet_change_orient(GtkWidget * w, PanelOrientType o, gpointer data) { ClockData *cd = data; time_t current_time; time(¤t_time); cd->orient = o; (*cd->update_func) (cd, current_time); } /*this is when the panel size changes */ static void applet_change_pixel_size(GtkWidget * w, int size, gpointer data) { ClockData *cd = data; time_t current_time; ComputerClock *cc; /* Adjust the padding on the text for small sizes of the panel (so the widget doesn't become bigger than the panel */ cc = gtk_object_get_user_data(GTK_OBJECT(cd->clockw)); gtk_container_set_border_width(GTK_CONTAINER(cc->align), ((size < PIXEL_SIZE_SMALL)? 0 : 3 ) ); time(¤t_time); cd->size = size; (*cd->update_func) (cd, current_time); } static void apply_properties_font(gpointer data) { ClockData *cd = data; ComputerClock *cc; GtkStyle *style; GdkFont *font; cc = gtk_object_get_user_data(GTK_OBJECT(cd->clockw)); if (cd->use_custom_font && cd->custom_font) { /* * hacked from gtk tutorial * FIXME: things should be freed ? */ font = gdk_font_load( cd->custom_font); style = gtk_style_copy(gtk_widget_get_style(cc->time)); gdk_font_unref(style->font); style->font = font; gdk_font_ref(style->font); gtk_widget_set_style( cc->time, style); } else { style = gtk_widget_get_style( cc->time->parent); gtk_widget_set_rc_style( cc->time); } } GtkWidget * make_clock_applet(const gchar * goad_id) { ClockData *cd; GtkWidget *applet; applet = applet_widget_new(goad_id); if (!applet) { g_warning(_("Can't create applet!\n")); return NULL; } cd = g_new(ClockData, 1); gnome_config_push_prefix(APPLET_WIDGET(applet)->privcfgpath); cd->hourformat = gnome_config_get_int("clock/hourformat=0"); /* if on a small screen don't show data by default */ if(gdk_screen_width()<=800) cd->showdate = gnome_config_get_int("clock/showdate=0"); else cd->showdate = gnome_config_get_int("clock/showdate=1"); cd->unixtime = gnome_config_get_int("clock/unixtime=0"); /* if on a small screen show tooltip with date by default */ if(gdk_screen_width()<=800) cd->showtooltip = gnome_config_get_int("clock/showtooltip=1"); else cd->showtooltip = gnome_config_get_int("clock/showtooltip=0"); cd->gmt_time = gnome_config_get_int("clock/gmt_time=0"); cd->use_custom_fmt = gnome_config_get_int("clock/use_custom_fmt=0"); cd->custom_fmt = gnome_config_get_string( "clock/custom_fmt=" DEFAULT_CUSTOM_FMT); cd->use_custom_font = gnome_config_get_int("clock/use_custom_font=0"); cd->custom_font = gnome_config_get_string( "clock/custom_font=" DEFAULT_CUSTOM_FONT); gnome_config_pop_prefix(); create_clock_widget(cd, applet); apply_properties_font(cd); /*we have to bind change_orient before we do applet_widget_add since we need to get an initial change_orient signal to set our initial oriantation, and we get that during the _add call */ gtk_signal_connect(GTK_OBJECT(applet), "change_orient", GTK_SIGNAL_FUNC(applet_change_orient), cd); /*similiar to the above in semantics*/ gtk_signal_connect(GTK_OBJECT(applet), "change_pixel_size", GTK_SIGNAL_FUNC(applet_change_pixel_size), cd); gtk_widget_show(cd->clockw); applet_widget_add(APPLET_WIDGET(applet), cd->clockw); gtk_widget_show(applet); gtk_signal_connect(GTK_OBJECT(applet), "save_session", GTK_SIGNAL_FUNC(applet_save_session), cd); applet_widget_register_stock_callback(APPLET_WIDGET(applet), "properties", GNOME_STOCK_MENU_PROP, _("Properties..."), clock_properties, cd); applet_widget_register_stock_callback(APPLET_WIDGET(applet), "help", GNOME_STOCK_PIXMAP_HELP, _("Help"), help_cb, "index.html" ); applet_widget_register_stock_callback(APPLET_WIDGET(applet), "about", GNOME_STOCK_MENU_ABOUT, _("About..."), clock_about, NULL); return applet; } static void apply_properties(GtkWidget * widget, gint button_num, gpointer data) { ClockData *cd = data; time_t current_time; struct tm *tm; cd->hourformat = cd->prop_hourformat; cd->showdate = cd->prop_showdate; cd->unixtime = cd->prop_unixtime; cd->gmt_time = cd->prop_gmt_time; cd->showtooltip = cd->prop_showtooltip; cd->use_custom_fmt = cd->prop_use_custom_fmt; cd->custom_fmt = cd->prop_custom_fmt; cd->use_custom_font = cd->prop_use_custom_font; cd->custom_font = cd->prop_custom_font; apply_properties_font(data); applet_widget_queue_resize(APPLET_WIDGET(cd->applet)); /* Call the clock's update function so that it paints its first state */ time(¤t_time); (*cd->update_func) (cd, current_time); gtk_timeout_remove(cd->timeout); /* Install timeout handler */ if (cd->gmt_time) tm = gmtime(¤t_time); else tm = localtime(¤t_time); if (cd->unixtime) cd->timeouttime = 1000; else cd->timeouttime = 36000-(tm->tm_sec*600); cd->timeout = gtk_timeout_add(cd->timeouttime, clock_timeout_callback, cd); if(!cd->showtooltip || cd->unixtime) applet_widget_set_tooltip(APPLET_WIDGET(cd->applet), ""); /* gtk_widget_queue_resize (cd->clockw);*/ } static void close_properties(GtkWidget * w, gpointer data) { ClockData *cd = data; cd->props = NULL; } static void set_hour_format_cb(GtkWidget * w, gpointer data) { g_return_if_fail(w != NULL); if(GTK_TOGGLE_BUTTON(w)->active) { ClockData *cd = gtk_object_get_user_data(GTK_OBJECT(w)); cd->prop_hourformat = (long)data; gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } } static void set_show_date_cb(GtkWidget * w, gpointer data) { ClockData *cd = data; cd->prop_showdate = GTK_TOGGLE_BUTTON(w)->active; gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } static void set_datasensitive_cb(GtkWidget * w, GtkWidget *wid) { gtk_widget_set_sensitive(wid,!(GTK_TOGGLE_BUTTON(w)->active)); } static void set_datainsensitive_cb(GtkWidget * w, GtkWidget *wid) { gtk_widget_set_sensitive(wid, (GTK_TOGGLE_BUTTON(w)->active)); } static void set_unixtime_cb(GtkWidget * w, gpointer data) { ClockData *cd = data; cd->prop_unixtime = GTK_TOGGLE_BUTTON(w)->active; gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } static void set_gmt_time_cb(GtkWidget * w, gpointer data) { ClockData *cd = data; cd->prop_gmt_time = GTK_TOGGLE_BUTTON(w)->active; gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } static void set_show_tooltip_cb(GtkWidget * w, gpointer data) { ClockData *cd = data; cd->prop_showtooltip = GTK_TOGGLE_BUTTON(w)->active; gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } static void set_custom_fmt_cb(GtkWidget * w, gpointer data) { g_return_if_fail(w != NULL); if(GTK_TOGGLE_BUTTON(w)->active) { ClockData *cd = gtk_object_get_user_data(GTK_OBJECT(w)); cd->prop_use_custom_fmt = (long)data; gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } } static void changed_custom_fmt_cb(GtkWidget * w, gpointer data) { ClockData *cd = data; if(cd->prop_custom_fmt) g_free(cd->prop_custom_fmt); cd->prop_custom_fmt = g_strdup(gtk_entry_get_text (GTK_ENTRY (w))); gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } static void set_custom_font_cb(GtkWidget * w, gpointer data) { ClockData *cd = data; cd->prop_use_custom_font = GTK_TOGGLE_BUTTON(w)->active; gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } static void changed_custom_font_cb(GtkWidget * w, gpointer data) { ClockData *cd = data; char *font; GtkWidget *peer; if (GNOME_IS_FONT_PICKER(w)){ font = gnome_font_picker_get_font_name (GNOME_FONT_PICKER(w)); peer = gtk_object_get_user_data (GTK_OBJECT(w)); gtk_entry_set_text (GTK_ENTRY(peer), font); } else { font = gtk_entry_get_text (GTK_ENTRY(w)); peer = gtk_object_get_user_data (GTK_OBJECT(w)); gnome_font_picker_set_font_name (GNOME_FONT_PICKER(peer), font); if(cd->prop_custom_font) g_free(cd->prop_custom_font); cd->prop_custom_font = g_strdup(font); gnome_property_box_changed (GNOME_PROPERTY_BOX (cd->props)); } } /* * my understanding of what should be decided/displayed: * DEFAULT * show unix time ? NO (if YES nothing else matters) * else * use GMT ? NO * use custom_fmt ? NO (if YES only tooltip active below) * else * 12hr or 24hr 12hr * date (NO if small screen, else YES) * tooltip date (YES if small screen, else NO) * * I've adjusted the properties page to reflect this structure.... */ static void clock_properties(AppletWidget * applet, gpointer data) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *label; GtkWidget *formatted; GtkWidget *unixtime; GtkWidget *format_frame; GtkWidget *format_vbox; GtkWidget *standard; GtkWidget *standard_hbox; GtkWidget *hour_hbox; GtkWidget *twelvehour; GtkWidget *twentyfourhour; GtkWidget *showdate; GtkWidget *use_custom_fmt; GtkWidget *custom_fmt; GtkWidget *use_custom_font; GtkWidget *font_picker; GtkWidget *use_gmt_time; GtkWidget *showtooltip; ClockData *cd = data; if(cd->props) { gdk_window_raise(cd->props->window); return; } cd->props = gnome_property_box_new(); gtk_window_set_title (GTK_WINDOW (cd->props), _("Clock properties")); gnome_window_icon_set_from_file (GTK_WINDOW (cd->props), GNOME_ICONDIR"/gnome-clock.png"); vbox = gtk_vbox_new(FALSE, GNOME_PAD_SMALL); hbox = gtk_hbox_new(FALSE, GNOME_PAD); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); label = gtk_label_new(_("Show:")); gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); formatted = gtk_radio_button_new_with_label(NULL, _("Formatted")); gtk_box_pack_start (GTK_BOX(hbox), formatted, FALSE, FALSE, 0); gtk_object_set_user_data(GTK_OBJECT(formatted), (gpointer) data); gtk_widget_show(formatted); unixtime = gtk_radio_button_new_with_label( gtk_radio_button_group(GTK_RADIO_BUTTON(formatted)), _("Unix")); gtk_box_pack_start (GTK_BOX(hbox), unixtime, FALSE, FALSE, 0); gtk_object_set_user_data(GTK_OBJECT(unixtime), (gpointer) data); gtk_widget_show(unixtime); label = gtk_label_new(_("Time")); gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); format_frame = gtk_frame_new(_("Format")); gtk_container_set_border_width(GTK_CONTAINER(format_frame), GNOME_PAD); gtk_box_pack_start (GTK_BOX(vbox), format_frame, FALSE, FALSE, 0); gtk_widget_show(format_frame); format_vbox = gtk_vbox_new(FALSE, GNOME_PAD_SMALL); gtk_container_add(GTK_CONTAINER(format_frame), format_vbox); gtk_widget_show(format_vbox); hbox = gtk_hbox_new(FALSE, GNOME_PAD); gtk_box_pack_start (GTK_BOX(format_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); standard = gtk_radio_button_new_with_label(NULL, _("Standard")); gtk_box_pack_start (GTK_BOX(hbox), standard, FALSE, FALSE, 0); gtk_object_set_user_data(GTK_OBJECT(standard), (gpointer) data); gtk_widget_show(standard); standard_hbox = gtk_hbox_new(FALSE, GNOME_PAD); gtk_box_pack_start (GTK_BOX(hbox), standard_hbox, FALSE, FALSE, 0); gtk_widget_show(standard_hbox); hour_hbox = gtk_hbox_new(FALSE, GNOME_PAD); gtk_container_add(GTK_CONTAINER(standard_hbox), hour_hbox); gtk_widget_show(hour_hbox); twelvehour = gtk_radio_button_new_with_label(NULL, _("12 hour")); gtk_box_pack_start (GTK_BOX(hour_hbox), twelvehour, FALSE, FALSE, 0); gtk_object_set_user_data(GTK_OBJECT(twelvehour), (gpointer) data); gtk_widget_show(twelvehour); twentyfourhour = gtk_radio_button_new_with_label( gtk_radio_button_group(GTK_RADIO_BUTTON(twelvehour)), _("24 hour")); gtk_box_pack_start (GTK_BOX(hour_hbox), twentyfourhour, FALSE, FALSE, 0); gtk_object_set_user_data(GTK_OBJECT(twentyfourhour), (gpointer) data); gtk_widget_show(twentyfourhour); showdate = gtk_check_button_new_with_label(_("Show date")); gtk_box_pack_start_defaults(GTK_BOX(standard_hbox), showdate); gtk_widget_show(showdate); hbox = gtk_hbox_new(FALSE, GNOME_PAD); gtk_box_pack_start (GTK_BOX(format_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); use_custom_fmt = gtk_radio_button_new_with_label( gtk_radio_button_group(GTK_RADIO_BUTTON(standard)), _("Custom")); gtk_box_pack_start (GTK_BOX(hbox), use_custom_fmt, FALSE, FALSE, 0); gtk_object_set_user_data(GTK_OBJECT(use_custom_fmt), (gpointer) data); gtk_widget_show(use_custom_fmt); custom_fmt= gtk_entry_new (); gtk_box_pack_start_defaults(GTK_BOX(hbox), custom_fmt); gtk_widget_show(custom_fmt); hbox = gtk_hbox_new(FALSE, GNOME_PAD); gtk_box_pack_start (GTK_BOX(format_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); use_gmt_time = gtk_check_button_new_with_label(_("Use GMT")); gtk_box_pack_start_defaults(GTK_BOX(hbox), use_gmt_time); gtk_widget_show(use_gmt_time); hbox = gtk_hbox_new(FALSE, GNOME_PAD); gtk_box_pack_start (GTK_BOX(format_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); showtooltip = gtk_check_button_new_with_label(_("Show date in tooltip")); gtk_box_pack_start_defaults(GTK_BOX(hbox), showtooltip); gtk_widget_show(showtooltip); hbox = gtk_hbox_new(FALSE, GNOME_PAD); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); use_custom_font = gtk_check_button_new_with_label(_("Font")); gtk_box_pack_start_defaults(GTK_BOX(hbox), use_custom_font); gtk_widget_show(use_custom_font); cd->font_entry = gtk_entry_new (); gtk_box_pack_start_defaults(GTK_BOX(hbox), cd->font_entry); gtk_widget_show(cd->font_entry); font_picker = gnome_font_picker_new(); gnome_font_picker_set_mode(GNOME_FONT_PICKER (font_picker), GNOME_FONT_PICKER_MODE_USER_WIDGET); label = gtk_label_new (_("Browse...")); gtk_widget_show(label); gnome_font_picker_uw_set_widget(GNOME_FONT_PICKER(font_picker), GTK_WIDGET(label)); gtk_object_set_user_data(GTK_OBJECT(font_picker), GTK_OBJECT(cd->font_entry)); gtk_object_set_user_data(GTK_OBJECT(cd->font_entry), GTK_OBJECT(font_picker)); gtk_box_pack_start_defaults(GTK_BOX(hbox), font_picker); gtk_widget_show(font_picker); /* What is, isn't active, sensitive, etc */ if (cd->unixtime) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(unixtime), TRUE); gtk_widget_set_sensitive(format_frame, FALSE); } else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(formatted),TRUE); gtk_widget_set_sensitive(format_frame, TRUE); } cd->prop_unixtime = cd->unixtime; if (cd->hourformat) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(twentyfourhour), TRUE); else gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(twelvehour), TRUE); cd->prop_hourformat = cd->hourformat; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(showdate), cd->showdate); cd->prop_showdate = cd->showdate; if (cd->use_custom_fmt) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(use_custom_fmt), TRUE); gtk_widget_set_sensitive(standard_hbox, FALSE); gtk_widget_set_sensitive(custom_fmt, TRUE); } else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(standard), TRUE); gtk_widget_set_sensitive(standard_hbox, TRUE); gtk_widget_set_sensitive(custom_fmt, FALSE); } cd->prop_use_custom_fmt = cd->use_custom_fmt; gtk_entry_set_text (GTK_ENTRY (custom_fmt), cd->custom_fmt ? cd->custom_fmt : DEFAULT_CUSTOM_FMT); cd->prop_custom_fmt = g_strdup(cd->custom_fmt); if (cd->use_custom_font) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(use_custom_font), TRUE); gtk_widget_set_sensitive(cd->font_entry, TRUE); gtk_widget_set_sensitive(font_picker, TRUE); } else { gtk_widget_set_sensitive(cd->font_entry, FALSE); gtk_widget_set_sensitive(font_picker, FALSE); } cd->prop_use_custom_font = cd->use_custom_font; if (!cd->custom_font) cd->custom_font = g_strdup( DEFAULT_CUSTOM_FONT); gtk_entry_set_text (GTK_ENTRY (cd->font_entry), cd->custom_font ); gnome_font_picker_set_font_name(GNOME_FONT_PICKER(font_picker), gtk_entry_get_text(GTK_ENTRY (cd->font_entry))); cd->prop_custom_font = g_strdup(cd->custom_font); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(use_gmt_time), cd->gmt_time); cd->prop_gmt_time = cd->gmt_time; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(showtooltip), cd->showtooltip); cd->prop_showtooltip = cd->showtooltip; /* the primary callbacks for each button */ gtk_signal_connect(GTK_OBJECT(unixtime), "toggled", (GtkSignalFunc) set_unixtime_cb, data); gtk_signal_connect(GTK_OBJECT(standard), "toggled", (GtkSignalFunc) set_custom_fmt_cb, (gpointer) 0); gtk_signal_connect(GTK_OBJECT(twelvehour), "toggled", (GtkSignalFunc) set_hour_format_cb, (gpointer) 0); gtk_signal_connect(GTK_OBJECT(twentyfourhour), "toggled", (GtkSignalFunc) set_hour_format_cb, (gpointer) 1); gtk_signal_connect(GTK_OBJECT(showdate), "toggled", (GtkSignalFunc) set_show_date_cb, data); gtk_signal_connect(GTK_OBJECT(use_custom_fmt), "toggled", (GtkSignalFunc) set_custom_fmt_cb, (gpointer) 1); gtk_signal_connect (GTK_OBJECT (custom_fmt), "changed", GTK_SIGNAL_FUNC (changed_custom_fmt_cb), data); gtk_signal_connect(GTK_OBJECT(use_custom_font), "toggled", (GtkSignalFunc) set_custom_font_cb, data); gtk_signal_connect (GTK_OBJECT (cd->font_entry), "changed", GTK_SIGNAL_FUNC (changed_custom_font_cb), data); gtk_signal_connect (GTK_OBJECT (font_picker), "font_set", GTK_SIGNAL_FUNC (changed_custom_font_cb), data); gtk_signal_connect(GTK_OBJECT(use_gmt_time), "toggled", (GtkSignalFunc) set_gmt_time_cb, data); gtk_signal_connect(GTK_OBJECT(showtooltip), "toggled", (GtkSignalFunc) set_show_tooltip_cb, data); /* further connections to keep sensitivity set ok */ gtk_signal_connect(GTK_OBJECT(unixtime), "toggled", (GtkSignalFunc) set_datasensitive_cb, format_frame); gtk_signal_connect(GTK_OBJECT(standard), "toggled", (GtkSignalFunc) set_datasensitive_cb, custom_fmt); gtk_signal_connect(GTK_OBJECT(use_custom_fmt), "toggled", (GtkSignalFunc) set_datasensitive_cb, standard_hbox); gtk_signal_connect(GTK_OBJECT(use_custom_font), "toggled", (GtkSignalFunc) set_datainsensitive_cb, cd->font_entry); gtk_signal_connect(GTK_OBJECT(use_custom_font), "toggled", (GtkSignalFunc) set_datainsensitive_cb, font_picker); gtk_widget_show(vbox); gnome_property_box_append_page(GNOME_PROPERTY_BOX(cd->props), vbox, gtk_label_new(_("Clock"))); gtk_signal_connect(GTK_OBJECT(cd->props), "apply", GTK_SIGNAL_FUNC(apply_properties), data); gtk_signal_connect(GTK_OBJECT(cd->props), "destroy", GTK_SIGNAL_FUNC(close_properties), data); gtk_signal_connect(GTK_OBJECT(cd->props), "help", GTK_SIGNAL_FUNC(phelp_cb), "index.html#CLOCK-PREFS"); gtk_widget_show(cd->props); } static void help_cb (GtkWidget *w, gpointer data) { GnomeHelpMenuEntry help_entry = { "clock_applet" }; help_entry.path = data; gnome_help_display (NULL, &help_entry); } static void phelp_cb (GtkWidget *w, gint tab, gpointer data) { help_cb (w, data); } static void clock_about (AppletWidget *applet, gpointer data) { static GtkWidget *about = NULL; static const gchar *authors[] = { "Miguel de Icaza <miguel@kernel.org>", "Federico Mena <quartic@gimp.org>", "Stuart Parmenter <pavlov@innerx.net>", "Mike Capell <Michael.Capell@Cern.Ch>", NULL }; if (about != NULL) { gdk_window_show (about->window); gdk_window_raise (about->window); return; } about = gnome_about_new (_("Clock Applet"), "1.001", _("(c) 1998 the Free Software Foundation"), authors, _("The clock applet gives your panel a `lightweight' and simple display of the date and time"), GNOME_ICONDIR"/gnome-clock.png"); gnome_window_icon_set_from_file (GTK_WINDOW (about), GNOME_ICONDIR"/gnome-clock.png"); gtk_signal_connect (GTK_OBJECT(about), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &about); gtk_widget_show (about); } --- End of file --- ------- Bug moved to this database by debbugs-export@bugzilla.gnome.org 2001-01-27 15:04 ------- This bug was previously known as bug 22405 at http://bugs.gnome.org/ http://bugs.gnome.org/show_bug.cgi?id=22405 Originally filed under the gnome-core product and general component. Unknown version 1.2.x in product gnome-core. Setting version to the default, "unspecified". The original reporter (Michael.Capell@Cern.Ch) of this bug does not have an account here. Reassigning to the exporter, debbugs-export@bugzilla.gnome.org. Reassigning to the default owner of the component, gnome-core-maint@bugzilla.gnome.org.
Yaikes. Could you try to make a patch next time rather then sending the whole file. It's impossible to know what you changed like this. I will try to figure this out sometime after 1.4 perhaps
Created attachment 659 [details] [review] new click looks
Attached a diff from the file in here and the current CVS version.
Is this still at all relevant? Please remove the PATCH keyword if the patch has suffered too much bitrot.
the patch is not so good, but the idea is: 1) allow to set custom format of displayed time 2) allow to change font 3) remove internet time
ok well as far as setting a custom font, that should be won't fix, however, setting a custom time format may be nice i guess. Actually in my opinion, seem kind of like a waste, but i'll let maintainers decide.
No, this shouldn't be configurable, we should just push for a good default - see #80675.