3333#define CAPPLET_NAME_ENTRY_WIDGET_NAME "session_properties_name_entry"
3434#define CAPPLET_COMMAND_ENTRY_WIDGET_NAME "session_properties_command_entry"
3535#define CAPPLET_COMMENT_ENTRY_WIDGET_NAME "session_properties_comment_entry"
36+ #define CAPPLET_DELAY_SPIN_WIDGET_NAME "session_properties_delay_spin"
3637#define CAPPLET_BROWSE_WIDGET_NAME "session_properties_browse_button"
3738
3839#ifdef __GNUC__
@@ -47,10 +48,12 @@ struct _GsmAppDialog
4748 GtkWidget * name_entry ;
4849 GtkWidget * command_entry ;
4950 GtkWidget * comment_entry ;
51+ GtkWidget * delay_spin ;
5052 GtkWidget * browse_button ;
5153 char * name ;
5254 char * command ;
5355 char * comment ;
56+ guint delay ;
5457};
5558
5659static void gsm_app_dialog_class_init (GsmAppDialogClass * klass );
6063 PROP_0 ,
6164 PROP_NAME ,
6265 PROP_COMMAND ,
63- PROP_COMMENT
66+ PROP_COMMENT ,
67+ PROP_DELAY
6468};
6569
6670G_DEFINE_TYPE (GsmAppDialog , gsm_app_dialog , GTK_TYPE_DIALOG )
@@ -151,6 +155,24 @@ on_entry_activate (GtkEntry *entry,
151155 gtk_dialog_response (GTK_DIALOG (dialog ), GTK_RESPONSE_OK );
152156}
153157
158+ static gboolean
159+ on_spin_output (GtkSpinButton * spin , GsmAppDialog * dialog )
160+ {
161+ GtkAdjustment * adjustment ;
162+ gchar * text ;
163+ int value ;
164+
165+ adjustment = gtk_spin_button_get_adjustment (spin );
166+ value = gtk_adjustment_get_value (adjustment );
167+ dialog -> delay = value ;
168+
169+ text = g_strdup_printf (_ ("%d s" ), value );
170+ gtk_entry_set_text (GTK_ENTRY (spin ), text );
171+ g_free (text );
172+
173+ return TRUE;
174+ }
175+
154176static void
155177setup_dialog (GsmAppDialog * dialog )
156178{
@@ -237,6 +259,17 @@ setup_dialog (GsmAppDialog *dialog)
237259 gtk_entry_set_text (GTK_ENTRY (dialog -> comment_entry ), dialog -> comment );
238260 }
239261
262+ dialog -> delay_spin = GTK_WIDGET (gtk_builder_get_object (xml , CAPPLET_DELAY_SPIN_WIDGET_NAME ));
263+ g_signal_connect (dialog -> delay_spin ,
264+ "output" ,
265+ G_CALLBACK (on_spin_output ),
266+ dialog );
267+ if (dialog -> delay > 0 ) {
268+ GtkAdjustment * adjustment ;
269+ adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (dialog -> delay_spin ));
270+ gtk_adjustment_set_value (adjustment , (gdouble ) dialog -> delay );
271+ }
272+
240273 if (xml != NULL ) {
241274 g_object_unref (xml );
242275 }
@@ -314,6 +347,16 @@ gsm_app_dialog_set_comment (GsmAppDialog *dialog,
314347 g_object_notify (G_OBJECT (dialog ), "comment" );
315348}
316349
350+ static void
351+ gsm_app_dialog_set_delay (GsmAppDialog * dialog ,
352+ guint delay )
353+ {
354+ g_return_if_fail (GSM_IS_APP_DIALOG (dialog ));
355+
356+ dialog -> delay = delay ;
357+ g_object_notify (G_OBJECT (dialog ), "delay" );
358+ }
359+
317360const char *
318361gsm_app_dialog_get_name (GsmAppDialog * dialog )
319362{
@@ -335,6 +378,13 @@ gsm_app_dialog_get_comment (GsmAppDialog *dialog)
335378 return gtk_entry_get_text (GTK_ENTRY (dialog -> comment_entry ));
336379}
337380
381+ guint
382+ gsm_app_dialog_get_delay (GsmAppDialog * dialog )
383+ {
384+ g_return_val_if_fail (GSM_IS_APP_DIALOG (dialog ), 0 );
385+ return dialog -> delay ;
386+ }
387+
338388static void
339389gsm_app_dialog_set_property (GObject * object ,
340390 guint prop_id ,
@@ -353,6 +403,9 @@ gsm_app_dialog_set_property (GObject *object,
353403 case PROP_COMMENT :
354404 gsm_app_dialog_set_comment (dialog , g_value_get_string (value ));
355405 break ;
406+ case PROP_DELAY :
407+ gsm_app_dialog_set_delay (dialog , g_value_get_uint (value ));
408+ break ;
356409 default :
357410 G_OBJECT_WARN_INVALID_PROPERTY_ID (object , prop_id , pspec );
358411 break ;
@@ -377,6 +430,9 @@ gsm_app_dialog_get_property (GObject *object,
377430 case PROP_COMMENT :
378431 g_value_set_string (value , dialog -> comment );
379432 break ;
433+ case PROP_DELAY :
434+ g_value_set_uint (value , dialog -> delay );
435+ break ;
380436 default :
381437 G_OBJECT_WARN_INVALID_PROPERTY_ID (object , prop_id , pspec );
382438 break ;
@@ -414,6 +470,15 @@ gsm_app_dialog_class_init (GsmAppDialogClass *klass)
414470 "comment" ,
415471 NULL ,
416472 G_PARAM_READWRITE | G_PARAM_CONSTRUCT ));
473+ g_object_class_install_property (object_class ,
474+ PROP_DELAY ,
475+ g_param_spec_uint ("delay" ,
476+ "delay" ,
477+ "delay" ,
478+ 0 ,
479+ 100 ,
480+ 0 ,
481+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT ));
417482}
418483
419484static void
@@ -425,14 +490,16 @@ gsm_app_dialog_init (GsmAppDialog *dialog)
425490GtkWidget *
426491gsm_app_dialog_new (const char * name ,
427492 const char * command ,
428- const char * comment )
493+ const char * comment ,
494+ guint delay )
429495{
430496 GObject * object ;
431497
432498 object = g_object_new (GSM_TYPE_APP_DIALOG ,
433499 "name" , name ,
434500 "command" , command ,
435501 "comment" , comment ,
502+ "delay" , delay ,
436503 NULL );
437504
438505 return GTK_WIDGET (object );
@@ -442,7 +509,8 @@ gboolean
442509gsm_app_dialog_run (GsmAppDialog * dialog ,
443510 char * * name_p ,
444511 char * * command_p ,
445- char * * comment_p )
512+ char * * comment_p ,
513+ guint * delay_p )
446514{
447515 gboolean retval ;
448516
@@ -452,6 +520,7 @@ gsm_app_dialog_run (GsmAppDialog *dialog,
452520 const char * name ;
453521 const char * exec ;
454522 const char * comment ;
523+ guint delay ;
455524 const char * error_msg ;
456525 GError * error ;
457526 char * * argv ;
@@ -460,6 +529,7 @@ gsm_app_dialog_run (GsmAppDialog *dialog,
460529 name = gsm_app_dialog_get_name (GSM_APP_DIALOG (dialog ));
461530 exec = gsm_app_dialog_get_command (GSM_APP_DIALOG (dialog ));
462531 comment = gsm_app_dialog_get_comment (GSM_APP_DIALOG (dialog ));
532+ delay = gsm_app_dialog_get_delay (GSM_APP_DIALOG (dialog ));
463533
464534 error = NULL ;
465535 error_msg = NULL ;
@@ -514,6 +584,10 @@ gsm_app_dialog_run (GsmAppDialog *dialog,
514584 * comment_p = g_strdup (comment );
515585 }
516586
587+ if (delay_p ) {
588+ * delay_p = delay ;
589+ }
590+
517591 retval = TRUE;
518592 break ;
519593 }
0 commit comments