587
/* Command line arguments are passed in the locale encoding; in almost
588
* all cases, we'd hope that is UTF-8 and no conversion is necessary.
589
* If it's not UTF-8, then it's possible that the message isn't
590
* representable in the locale encoding.
593
append_argument (GPtrArray *args,
596
char *locale_arg = g_locale_from_utf8 (arg, -1, NULL, NULL, NULL);
598
/* This is cheesy, but it's better to have a few ???'s in the dialog
599
* for an unresponsive application than no dialog at all appear */
601
locale_arg = g_strdup ("???");
603
g_ptr_array_add (args, locale_arg);
588
607
meta_show_dialog (const char *type,
589
608
const char *message,
598
617
GError *error = NULL;
602
const char **argvl = g_malloc(sizeof (char*) *
604
g_slist_length (columns)*2 +
605
g_slist_length (entries)));
607
argvl[i++] = "zenity";
609
argvl[i++] = "--display";
610
argvl[i++] = display;
611
argvl[i++] = "--class";
612
argvl[i++] = "mutter-dialog";
613
argvl[i++] = "--title";
622
args = g_ptr_array_new ();
624
append_argument (args, "zenity");
625
append_argument (args, type);
626
append_argument (args, "--display");
627
append_argument (args, display);
628
append_argument (args, "--class");
629
append_argument (args, "mutter-dialog");
630
append_argument (args, "--title");
614
631
/* Translators: This is the title used on dialog boxes */
615
argvl[i++] = _("Mutter");
616
argvl[i++] = "--text";
617
argvl[i++] = message;
632
append_argument (args, _("Mutter"));
633
append_argument (args, "--text");
634
append_argument (args, message);
621
argvl[i++] = "--timeout";
622
argvl[i++] = timeout;
638
append_argument (args, "--timeout");
639
append_argument (args, timeout);
627
argvl[i++] = "--ok-label";
628
argvl[i++] = ok_text;
644
append_argument (args, "--ok-label");
645
append_argument (args, ok_text);
633
argvl[i++] = "--cancel-label";
634
argvl[i++] = cancel_text;
650
append_argument (args, "--cancel-label");
651
append_argument (args, cancel_text);
640
argvl[i++] = "--column";
641
argvl[i++] = tmp->data;
657
append_argument (args, "--column");
658
append_argument (args, tmp->data);
648
argvl[i++] = tmp->data;
665
append_argument (args, tmp->data);
669
g_ptr_array_add (args, NULL); /* NULL-terminate */
654
671
if (transient_for)
707
725
static void ensure_later_repaint_func (void);
728
unref_later (MetaLater *later)
730
if (--later->ref_count == 0)
734
later->notify (later->data);
735
later->notify = NULL;
737
g_slice_free (MetaLater, later);
710
742
destroy_later (MetaLater *later)
712
744
if (later->source)
713
g_source_remove (later->source);
715
later->notify (later->data);
716
g_slice_free (MetaLater, later);
746
g_source_remove (later->source);
719
753
/* Used to sort the list of laters with the highest priority
730
764
run_repaint_laters (gpointer data)
732
GSList *old_laters = laters;
734
768
gboolean keep_timeline_running = FALSE;
737
for (l = old_laters; l; l = l->next)
771
for (l = laters; l; l = l->next)
739
773
MetaLater *later = l->data;
740
774
if (later->source == 0 ||
741
775
(later->when <= META_LATER_BEFORE_REDRAW && !later->run_once))
743
if (later->func (later->data))
745
if (later->source == 0)
746
keep_timeline_running = TRUE;
747
laters = g_slist_insert_sorted (laters, later, compare_laters);
750
destroy_later (later);
778
laters_copy = g_slist_prepend (laters_copy, later);
781
laters_copy = g_slist_reverse (laters_copy);
783
for (l = laters_copy; l; l = l->next)
785
MetaLater *later = l->data;
787
if (later->func && later->func (later->data))
789
if (later->source == 0)
790
keep_timeline_running = TRUE;
753
laters = g_slist_insert_sorted (laters, later, compare_laters);
793
meta_later_remove (later->id);
756
797
if (!keep_timeline_running)
757
798
clutter_timeline_stop (later_timeline);
759
g_slist_free (old_laters);
800
g_slist_free (laters_copy);
761
802
/* Just keep the repaint func around - it's cheap if the list is empty */