Skip to content

Commit 0e2eb8a

Browse files
yetistlukefromdc
authored andcommitted
Add a delay setting to Startup Manager
Fixed issue #127 - capplet/gsm-app-dialog.c - capplet/gsm-app-dialog.h - capplet/gsm-properties-dialog.c - capplet/gsp-app.c - capplet/gsp-app.h - capplet/gsp-keyfile.h - data/session-properties.ui
1 parent 34ef232 commit 0e2eb8a

File tree

7 files changed

+166
-15
lines changed

7 files changed

+166
-15
lines changed

capplet/gsm-app-dialog.c

Lines changed: 77 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
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

5659
static void gsm_app_dialog_class_init (GsmAppDialogClass *klass);
@@ -60,7 +63,8 @@ enum {
6063
PROP_0,
6164
PROP_NAME,
6265
PROP_COMMAND,
63-
PROP_COMMENT
66+
PROP_COMMENT,
67+
PROP_DELAY
6468
};
6569

6670
G_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+
154176
static void
155177
setup_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+
317360
const char *
318361
gsm_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+
338388
static void
339389
gsm_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

419484
static void
@@ -425,14 +490,16 @@ gsm_app_dialog_init (GsmAppDialog *dialog)
425490
GtkWidget *
426491
gsm_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
442509
gsm_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
}

capplet/gsm-app-dialog.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,19 @@ G_DECLARE_FINAL_TYPE (GsmAppDialog, gsm_app_dialog, GSM, APP_DIALOG, GtkDialog)
3131

3232
GtkWidget * gsm_app_dialog_new (const char *name,
3333
const char *command,
34-
const char *comment);
34+
const char *comment,
35+
guint delay);
3536

3637
gboolean gsm_app_dialog_run (GsmAppDialog *dialog,
3738
char **name_p,
3839
char **command_p,
39-
char **comment_p);
40+
char **comment_p,
41+
guint *delay);
4042

4143
const char * gsm_app_dialog_get_name (GsmAppDialog *dialog);
4244
const char * gsm_app_dialog_get_command (GsmAppDialog *dialog);
4345
const char * gsm_app_dialog_get_comment (GsmAppDialog *dialog);
46+
guint gsm_app_dialog_get_delay (GsmAppDialog *dialog);
4447

4548
G_END_DECLS
4649

capplet/gsm-properties-dialog.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -361,14 +361,15 @@ on_add_app_clicked (GtkWidget *widget,
361361
char *name;
362362
char *exec;
363363
char *comment;
364+
guint delay;
364365

365-
add_dialog = gsm_app_dialog_new (NULL, NULL, NULL);
366+
add_dialog = gsm_app_dialog_new (NULL, NULL, NULL, 0);
366367
gtk_window_set_transient_for (GTK_WINDOW (add_dialog),
367368
GTK_WINDOW (dialog));
368369

369370
if (gsm_app_dialog_run (GSM_APP_DIALOG (add_dialog),
370-
&name, &exec, &comment)) {
371-
gsp_app_create (name, comment, exec);
371+
&name, &exec, &comment, &delay)) {
372+
gsp_app_create (name, comment, exec, delay);
372373
g_free (name);
373374
g_free (exec);
374375
g_free (comment);
@@ -426,16 +427,18 @@ on_edit_app_clicked (GtkWidget *widget,
426427
char *name;
427428
char *exec;
428429
char *comment;
430+
guint delay;
429431

430432
edit_dialog = gsm_app_dialog_new (gsp_app_get_name (app),
431433
gsp_app_get_exec (app),
432-
gsp_app_get_comment (app));
434+
gsp_app_get_comment (app),
435+
gsp_app_get_delay (app));
433436
gtk_window_set_transient_for (GTK_WINDOW (edit_dialog),
434437
GTK_WINDOW (dialog));
435438

436439
if (gsm_app_dialog_run (GSM_APP_DIALOG (edit_dialog),
437-
&name, &exec, &comment)) {
438-
gsp_app_update (app, name, comment, exec);
440+
&name, &exec, &comment, &delay)) {
441+
gsp_app_update (app, name, comment, exec, delay);
439442
g_free (name);
440443
g_free (exec);
441444
g_free (comment);

capplet/gsp-app.c

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#define GSP_ASP_SAVE_MASK_NAME 0x0004
4747
#define GSP_ASP_SAVE_MASK_EXEC 0x0008
4848
#define GSP_ASP_SAVE_MASK_COMMENT 0x0010
49+
#define GSP_ASP_SAVE_MASK_DELAY 0x0020
4950
#define GSP_ASP_SAVE_MASK_ALL 0xffff
5051

5152
typedef struct {
@@ -59,6 +60,7 @@ typedef struct {
5960
char *exec;
6061
char *comment;
6162
char *icon;
63+
gint delay;
6264

6365
GIcon *gicon;
6466
char *description;
@@ -487,6 +489,10 @@ _gsp_app_save (gpointer data)
487489
priv->exec);
488490
}
489491

492+
if (priv->save_mask & GSP_ASP_SAVE_MASK_DELAY) {
493+
gsp_key_file_set_delay (keyfile, priv->delay);
494+
}
495+
490496
_gsp_ensure_user_autostart_dir ();
491497
if (gsp_key_file_to_file (keyfile, priv->path, NULL)) {
492498
priv->skip_next_monitor_event = TRUE;
@@ -643,6 +649,17 @@ gsp_app_get_comment (GspApp *app)
643649
return priv->comment;
644650
}
645651

652+
guint
653+
gsp_app_get_delay (GspApp *app)
654+
{
655+
GspAppPrivate *priv;
656+
657+
g_return_val_if_fail (GSP_IS_APP (app), 0);
658+
priv = gsp_app_get_instance_private (app);
659+
660+
return priv->delay;
661+
}
662+
646663
GIcon *
647664
gsp_app_get_icon (GspApp *app)
648665
{
@@ -716,7 +733,8 @@ void
716733
gsp_app_update (GspApp *app,
717734
const char *name,
718735
const char *comment,
719-
const char *exec)
736+
const char *exec,
737+
guint delay)
720738
{
721739
gboolean changed;
722740
GspAppPrivate *priv;
@@ -751,6 +769,12 @@ gsp_app_update (GspApp *app,
751769
priv->save_mask |= GSP_ASP_SAVE_MASK_EXEC;
752770
}
753771

772+
if ( delay != priv->delay) {
773+
changed = TRUE;
774+
priv->delay = delay;
775+
priv->save_mask |= GSP_ASP_SAVE_MASK_DELAY;
776+
}
777+
754778
if (changed) {
755779
_gsp_app_queue_save (app);
756780
_gsp_app_emit_changed (app);
@@ -928,6 +952,7 @@ gsp_app_new (const char *path,
928952
G_KEY_FILE_DESKTOP_KEY_EXEC);
929953
priv->comment = gsp_key_file_get_locale_string (keyfile,
930954
G_KEY_FILE_DESKTOP_KEY_COMMENT);
955+
priv->delay = gsp_key_file_get_delay (keyfile);
931956

932957
if (gsm_util_text_is_blank (priv->name)) {
933958
g_free (priv->name);
@@ -1035,7 +1060,8 @@ _gsp_find_free_basename (const char *suggested_basename)
10351060
void
10361061
gsp_app_create (const char *name,
10371062
const char *comment,
1038-
const char *exec)
1063+
const char *exec,
1064+
guint delay)
10391065
{
10401066
GspAppManager *manager;
10411067
GspAppPrivate *priv;
@@ -1074,6 +1100,7 @@ gsp_app_create (const char *name,
10741100
}
10751101
priv->exec = g_strdup (exec);
10761102
priv->comment = g_strdup (comment);
1103+
priv->delay = delay;
10771104
priv->icon = NULL;
10781105

10791106
priv->gicon = NULL;

capplet/gsp-app.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,13 @@ GType gsp_app_get_type (void) G_GNUC_CONST;
4444

4545
void gsp_app_create (const char *name,
4646
const char *comment,
47-
const char *exec);
47+
const char *exec,
48+
guint delay);
4849
void gsp_app_update (GspApp *app,
4950
const char *name,
5051
const char *comment,
51-
const char *exec);
52+
const char *exec,
53+
guint delay);
5254

5355
gboolean gsp_app_copy_desktop_file (const char *uri);
5456

@@ -66,6 +68,7 @@ void gsp_app_set_enabled (GspApp *app,
6668
const char *gsp_app_get_name (GspApp *app);
6769
const char *gsp_app_get_exec (GspApp *app);
6870
const char *gsp_app_get_comment (GspApp *app);
71+
guint gsp_app_get_delay (GspApp *app);
6972

7073
const char *gsp_app_get_description (GspApp *app);
7174
GIcon *gsp_app_get_icon (GspApp *app);

0 commit comments

Comments
 (0)