~ubuntu-branches/ubuntu/hardy/gxine/hardy

« back to all changes in this revision

Viewing changes to src/wizards.c

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2008-03-21 11:24:59 UTC
  • mfrom: (1.1.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20080321112459-igb0jy01nytpdrzt
Tags: 0.5.901-1ubuntu1
* merge debian changes for hardy PPA. Remaining changes:
  - debian/control: added Xb-Npp-xxx tags accordingly to "firefox distro
    add-on suport" spec,
    (https://blueprints.launchpad.net/ubuntu/+spec/firefox-distro-addon-support)
* Feature Freeze exception granted in LP: #204563
* New upstream release fixes playing DVDs. LP: #128864
* mime.default: add "x-content/video-dvd;x-content/video-vcd;x-content/video-svcd;"
  to get it listed as a player for dvd and video cds in nautilus. Thanks to
  Sebastien Bacher for the hint.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * Copyright (C) 2001-2006 the xine-project
 
2
 * Copyright (C) 2001-2007 the xine-project
3
3
 *
4
4
 * This program is free software; you can redistribute it and/or
5
5
 * modify it under the terms of the GNU General Public License as
16
16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
17
17
 * USA
18
18
 *
19
 
 * $Id: wizards.c,v 1.46 2006-03-08 23:42:21 dsalt Exp $
20
 
 *
21
19
 * stuff to run on first startup / setup wizards
22
20
 */
23
21
 
44
42
#include "desktop_integration.h"
45
43
#include "preferences.h"
46
44
 
47
 
static GtkWidget *add_label (GtkWidget *vbox, const char *label)
 
45
static GtkWidget *add_label (GtkBox *vbox, const char *label)
48
46
{
49
 
  GtkWidget *l = gtk_label_new (label);
 
47
  GtkWidget *l = ui_label_new_with_markup (label);
50
48
  gtk_label_set_line_wrap (GTK_LABEL (l), TRUE);
51
 
  gtk_label_set_use_markup (GTK_LABEL (l), TRUE);
52
49
  gtk_misc_set_alignment (GTK_MISC (l), 0, 0.5);
53
 
  gtk_box_pack_start (GTK_BOX(vbox), l, FALSE, FALSE, 5);
 
50
  gtk_box_pack_start (vbox, l, FALSE, FALSE, 5);
54
51
  return l;
55
52
}
56
53
 
57
 
static GtkWidget *add_heading (GtkWidget *vbox, const char *label)
 
54
static GtkWidget *add_heading (GtkBox *vbox, const char *label)
58
55
{
59
56
  char *markup = g_strdup_printf ("<big><b>%s</b></big>", label);
60
57
  GtkWidget *l = add_label (vbox, markup);
62
59
  return l;
63
60
}
64
61
 
65
 
static gboolean do_welcome (GtkWidget *dlg, GtkWidget *vbox)
 
62
static gboolean do_welcome (GtkDialog *dlg, GtkBox *vbox)
66
63
{
67
64
  add_heading (vbox, _("Welcome to gxine!\n\n"));
68
65
  add_label (vbox, _("Would you like to run some setup wizards now "
96
93
  preferences_update_entry (&entry);
97
94
}
98
95
 
99
 
static gboolean do_health_check (GtkWidget *dlg, GtkWidget *vbox)
 
96
static gboolean do_health_check (GtkDialog *dlg, GtkBox *vbox)
100
97
{
101
98
  GtkWidget           *l, *table, *b;
102
99
  xine_health_check_t  hc;
155
152
 
156
153
    gtk_table_resize (GTK_TABLE (table), 3, check+1);
157
154
 
158
 
    l = gtk_label_new (results->title);
 
155
    l = ui_label_new_with_xalign (results->title, 0);
159
156
    gtk_table_attach (GTK_TABLE (table), l, 0, 1, check, check+1, GTK_FILL,
160
157
                      GTK_SHRINK, 2, 5);
161
 
    gtk_misc_set_alignment (GTK_MISC (l), 0, 0.5);
162
158
 
163
159
    switch (results->status)
164
160
    {
190
186
}
191
187
 
192
188
#ifdef USE_INTEGRATION_WIZARD
193
 
static GtkWidget *cb_moz;
194
 
static GtkWidget *cb_gnome;
195
 
static GtkWidget *cb_kde;
196
 
static GtkWidget *cb_mailcap;
 
189
static struct {
 
190
  GtkToggleButton *moz, *gnome, *kde, *mailcap;
 
191
} cb;
197
192
 
198
193
static void integrate_cb (GtkButton *button, gpointer data)
199
194
{
200
195
  gboolean state = !!data;
201
 
  if (GTK_WIDGET_SENSITIVE (cb_mailcap))
202
 
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_mailcap), state);
203
 
  if (GTK_WIDGET_SENSITIVE (cb_moz))
204
 
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_moz), state);
205
 
  if (GTK_WIDGET_SENSITIVE (cb_gnome))
206
 
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_gnome), state);
207
 
  if (GTK_WIDGET_SENSITIVE (cb_kde))
208
 
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_kde), state);
209
 
}
210
 
 
211
 
static gboolean ask_integration_wizard (GtkWidget *w, GtkWidget *vbox)
 
196
  if (GTK_WIDGET_SENSITIVE (cb.mailcap))
 
197
    gtk_toggle_button_set_active (cb.mailcap, state);
 
198
  if (GTK_WIDGET_SENSITIVE (cb.moz))
 
199
    gtk_toggle_button_set_active (cb.moz, state);
 
200
  if (GTK_WIDGET_SENSITIVE (cb.gnome))
 
201
    gtk_toggle_button_set_active (cb.gnome, state);
 
202
  if (GTK_WIDGET_SENSITIVE (cb.kde))
 
203
    gtk_toggle_button_set_active (cb.kde, state);
 
204
}
 
205
 
 
206
static GtkToggleButton *
 
207
new_toggle (GtkBox *box, const char *label, gboolean active)
 
208
{
 
209
  GtkWidget *w = gtk_check_button_new_with_mnemonic (label);
 
210
  gtk_widget_set_sensitive (w, active);
 
211
  gtk_box_pack_start (box, w, FALSE, FALSE, 5);
 
212
  GtkToggleButton *b = GTK_TOGGLE_BUTTON (w);
 
213
  gtk_toggle_button_set_active (b, active);
 
214
  return b;
 
215
}
 
216
 
 
217
static gboolean ask_integration_wizard (GtkDialog *w, GtkBox *vbox)
212
218
{
213
219
  struct stat st;
214
220
  gchar *sname;
215
221
  GtkWidget *b, *hbox;
216
 
  gboolean enable;
 
222
  GtkBox *vb = GTK_BOX (vbox);
217
223
 
218
224
  add_heading (vbox, _("Registration"));
219
225
  add_label (vbox, _("Register gxine with the following applications "
220
226
                     "as a media handler/helper:"));
221
227
 
222
 
  cb_mailcap = gtk_check_button_new_with_mnemonic ("~_/.mailcap");
223
 
  gtk_box_pack_start (GTK_BOX(vbox), cb_mailcap, FALSE, FALSE, 5);
224
 
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_mailcap), TRUE);
 
228
  cb.mailcap = new_toggle (vb, "~_/.mailcap", TRUE);
225
229
 
226
 
  cb_moz = gtk_check_button_new_with_mnemonic (_("_Mozilla & Mozilla Firefox (plugin)"));
227
 
  gtk_box_pack_start (GTK_BOX(vbox), cb_moz, FALSE, FALSE, 5);
228
230
  sname = g_build_filename (plugindir, "gxineplugin.so", NULL);
229
 
  enable = !stat (sname, &st);
230
 
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_moz), enable);
231
 
  gtk_widget_set_sensitive (cb_moz, enable);
 
231
  cb.moz = new_toggle (vb, _("_Mozilla & Mozilla Firefox (plugin)"), !stat (sname, &st));
232
232
  g_free (sname);
233
233
 
234
 
  cb_gnome = gtk_check_button_new_with_mnemonic (_("_GNOME, Nautilus"));
235
 
  gtk_box_pack_start (GTK_BOX(vbox), cb_gnome, FALSE, FALSE, 5);
236
 
  enable = di_gnome_vfs_init ();
237
 
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_gnome), enable);
238
 
  gtk_widget_set_sensitive (cb_gnome, enable);
 
234
  cb.gnome = new_toggle (vb, _("_GNOME, Nautilus"), gxine_vfs_init ());
239
235
 
240
 
  cb_kde = gtk_check_button_new_with_mnemonic (_("_KDE, Konqueror"));
241
 
  gtk_box_pack_start (GTK_BOX(vbox), cb_kde, FALSE, FALSE, 5);
242
 
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_kde), TRUE);
 
236
  cb.kde = new_toggle (vb, _("_KDE, Konqueror"), TRUE);
243
237
 
244
238
  hbox = gtk_hbox_new (FALSE, 2);
245
 
  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
 
239
  gtk_box_pack_start (vb, hbox, FALSE, FALSE, 2);
246
240
 
247
241
  b = ui_button_new_stock_mnemonic (GTK_STOCK_ADD, _("_All"));
248
242
  gtk_box_pack_start (GTK_BOX (hbox), b, FALSE, FALSE, 2);
260
254
static void desktop_integration (void)
261
255
{
262
256
  di_registration_flush ();
263
 
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cb_mailcap)))
 
257
  if (gtk_toggle_button_get_active (cb.mailcap))
264
258
    di_register_mailcap();
265
 
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cb_gnome)))
 
259
  if (gtk_toggle_button_get_active (cb.gnome))
266
260
    di_register_gnome();
267
 
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cb_kde)))
 
261
  if (gtk_toggle_button_get_active (cb.kde))
268
262
    di_register_kde();
269
 
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cb_moz)))
 
263
  if (gtk_toggle_button_get_active (cb.moz))
270
264
    di_register_mozilla();
271
265
}
272
266
 
273
 
static gboolean report_integration_wizard (GtkWidget *w, GtkWidget *vbox)
 
267
static gboolean report_integration_wizard (GtkDialog *w, GtkBox *vbox)
274
268
{
275
269
  const char *report = di_registration_report ();
276
270
  if (!report)
315
309
 
316
310
void run_wizards (gboolean requested)
317
311
{
318
 
  static GtkWidget *dlg = NULL;
 
312
  static GtkDialog *dlg = NULL;
319
313
 
320
314
  if (dlg)
321
315
  {
327
321
  if (requested
328
322
      || (xine_config_register_num (xine, "misc.wizards_shown", 0,
329
323
                                    _("Keep track of whether user has seen wizards yet"),
330
 
                                    NULL, 20, NULL, NULL) < WIZARDS_LEVEL))
 
324
                                    NULL, 32767, NULL, NULL) < WIZARDS_LEVEL))
331
325
  {
332
326
    xine_cfg_entry_t  entry;
333
327
    int b, state;
334
328
 
335
329
    static const struct {
336
 
      GtkWidget *(*create) (GtkWidget *, GtkWidget *);
 
330
      GtkWidget *(*create) (GtkDialog *, GtkBox *);
337
331
      gboolean (*action) (void); /* TRUE to skip a stage */
338
332
    } wizards[] = {
339
333
      { do_welcome, NULL },
353
347
 
354
348
    /* set up dialog which all wizards will use */
355
349
 
356
 
    dlg = gtk_dialog_new_with_buttons (_("gxine setup wizards"), NULL, 0,
 
350
    dlg = GTK_DIALOG (gtk_dialog_new_with_buttons (_("gxine setup wizards"), NULL, 0,
357
351
                                       GTK_STOCK_GO_FORWARD, GTK_RESPONSE_ACCEPT,
358
352
                                       GTK_STOCK_CLOSE, GTK_RESPONSE_DELETE_EVENT,
359
 
                                       NULL);
360
 
    gtk_dialog_set_default_response (GTK_DIALOG(dlg), GTK_RESPONSE_ACCEPT);
 
353
                                       NULL));
 
354
    gtk_dialog_set_default_response (dlg, GTK_RESPONSE_ACCEPT);
361
355
    gtk_window_set_default_size (GTK_WINDOW (dlg), -1, 400);
362
356
    gtk_window_set_modal (GTK_WINDOW (dlg), !requested);
363
357
    g_object_connect (G_OBJECT (dlg),
372
366
    /* headline */
373
367
    {
374
368
      GtkWidget *w, *b = gtk_hbox_new (0, 0);
375
 
      gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), b, FALSE, FALSE, 2);
 
369
      gtk_box_pack_start (GTK_BOX (dlg->vbox), b, FALSE, FALSE, 2);
376
370
      gtk_box_pack_start (GTK_BOX (b),
377
371
                          gtk_image_new_from_stock (GXINE_LOGO, icon_size_logo),
378
372
                          FALSE, FALSE, 2);
379
 
      w = gtk_label_new (_("<span face='serif' size='xx-large' weight='bold'>Welcome!</span>"));
380
 
      gtk_label_set_use_markup (GTK_LABEL (w), TRUE);
 
373
      w = ui_label_new_with_markup (_("<span face='serif' size='xx-large' weight='bold'>Welcome!</span>"));
381
374
      gtk_box_pack_start (GTK_BOX (b), w, FALSE, FALSE, 2);
382
375
    }
383
376
 
384
 
    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox),
 
377
    gtk_box_pack_start (GTK_BOX (dlg->vbox),
385
378
                        gtk_hseparator_new (), FALSE, FALSE, 5);
386
379
 
387
 
    window_show (dlg, NULL);
 
380
    window_show ((GtkWidget *)dlg, NULL);
388
381
 
389
382
    state = -1;
390
383
    while (1)
391
384
    {
392
385
      GtkWidget *content = gtk_vbox_new (0, 0);
393
 
      gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dlg)->vbox), content);
 
386
      gtk_box_pack_start_defaults (GTK_BOX (dlg->vbox), content);
394
387
 
395
388
      if (wizards[++state].create)
396
389
      {
397
 
        if (wizards[state].create (dlg, content))
 
390
        if (wizards[state].create (dlg, GTK_BOX (content)))
398
391
          goto next;
399
392
      }
400
393
      else
401
394
      {
402
 
        gtk_dialog_set_response_sensitive (GTK_DIALOG (dlg), GTK_RESPONSE_ACCEPT, FALSE);
403
 
        add_heading (content, _("Setup completed."));
 
395
        gtk_dialog_set_response_sensitive (dlg, GTK_RESPONSE_ACCEPT, FALSE);
 
396
        add_heading (GTK_BOX (content), _("Setup completed."));
404
397
      }
405
398
 
406
399
      gtk_widget_show_all (content);
413
406
        wizards[state].action ();
414
407
 
415
408
      next:
416
 
      gtk_container_remove (GTK_CONTAINER (GTK_DIALOG (dlg)->vbox), content);
 
409
      gtk_container_remove (GTK_CONTAINER (dlg->vbox), content);
417
410
    }
418
411
 
419
 
    gtk_widget_destroy (dlg);
 
412
    gtk_widget_destroy (GTK_WIDGET (dlg));
420
413
    dlg = NULL;
421
414
  }
422
415
}