brasero r1654 - in trunk: . src
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r1654 - in trunk: . src
- Date: Thu, 25 Dec 2008 16:29:29 +0000 (UTC)
Author: philippr
Date: Thu Dec 25 16:29:29 2008
New Revision: 1654
URL: http://svn.gnome.org/viewvc/brasero?rev=1654&view=rev
Log:
2008-12-25 Philippe Rouquier <ykw localhost localdomain>
Allow brasero to be set transient to another window from the command
line. This change is necessary to properly work with totem plugin.
(must be backported)
* src/brasero-app.c (brasero_app_dialog), (brasero_app_alert),
(brasero_app_run), (brasero_app_set_parent), (brasero_app_blank),
(brasero_app_check), (brasero_app_current_toplevel_destroyed),
(brasero_app_set_toplevel):
* src/brasero-app.h:
* src/brasero-burn-dialog.c (brasero_burn_dialog_init):
* src/brasero-project-manager.c (brasero_project_manager_burn),
(brasero_project_manager_burn_iso_dialog),
(brasero_project_manager_copy_disc):
* src/brasero-project.c (brasero_project_burn):
* src/main.c (brasero_app_parse_options), (main):
Modified:
trunk/ChangeLog
trunk/src/brasero-app.c
trunk/src/brasero-app.h
trunk/src/brasero-burn-dialog.c
trunk/src/brasero-project-manager.c
trunk/src/brasero-project.c
trunk/src/main.c
Modified: trunk/src/brasero-app.c
==============================================================================
--- trunk/src/brasero-app.c (original)
+++ trunk/src/brasero-app.c Thu Dec 25 16:29:29 2008
@@ -45,6 +45,8 @@
typedef struct _BraseroAppPrivate BraseroAppPrivate;
struct _BraseroAppPrivate
{
+ GdkWindow *parent;
+
GtkWidget *toplevel;
GtkWidget *projects;
@@ -188,6 +190,12 @@
button_type,
primary_message);
+ if (!toplevel && priv->parent) {
+ gtk_widget_realize (GTK_WIDGET (dialog));
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gdk_window_set_transient_for (GTK_WIDGET (dialog)->window, priv->parent);
+ }
+
if (is_on_top) {
gtk_window_set_skip_pager_hint (GTK_WINDOW (dialog), FALSE);
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), FALSE);
@@ -209,24 +217,37 @@
GtkMessageType type)
{
GtkWidget *parent = NULL;
+ gboolean is_on_top= TRUE;
BraseroAppPrivate *priv;
GtkWidget *alert;
priv = BRASERO_APP_PRIVATE (app);
/* Whatever happens, they need a parent or must be in the taskbar */
- if (priv->is_running)
+ if (priv->is_running) {
parent = GTK_WIDGET (app);
- else if (priv->toplevel)
+ is_on_top = FALSE;
+ }
+ else if (priv->toplevel) {
parent = priv->toplevel;
+ is_on_top = FALSE;
+ }
alert = brasero_utils_create_message_dialog (parent,
primary_message,
secondary_message,
type);
- gtk_window_set_title (GTK_WINDOW (alert), _("Disc Burner"));
- if (!parent) {
+ if (!parent && priv->parent) {
+ is_on_top = FALSE;
+
+ gtk_widget_realize (GTK_WIDGET (alert));
+ gtk_window_set_modal (GTK_WINDOW (alert), TRUE);
+ gdk_window_set_transient_for (GTK_WIDGET (alert)->window, priv->parent);
+ }
+
+ if (is_on_top) {
+ gtk_window_set_title (GTK_WINDOW (alert), _("Disc Burner"));
gtk_window_set_skip_pager_hint (GTK_WINDOW (alert), FALSE);
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (alert), FALSE);
}
@@ -339,10 +360,27 @@
priv->is_running = TRUE;
gtk_widget_realize (GTK_WIDGET (app));
+
+ if (priv->parent) {
+ gtk_window_set_modal (GTK_WINDOW (app), TRUE);
+ gdk_window_set_transient_for (GTK_WIDGET (app)->window, priv->parent);
+ }
+
brasero_session_load (app);
}
void
+brasero_app_set_parent (BraseroApp *app,
+ guint parent_xid)
+{
+ BraseroAppPrivate *priv;
+
+ priv = BRASERO_APP_PRIVATE (app);
+
+ priv->parent = gdk_window_foreign_new (parent_xid);
+}
+
+void
brasero_app_blank (BraseroApp *app,
const gchar *device)
{
@@ -370,7 +408,13 @@
}
if (!priv->is_running) {
- gtk_widget_show (dialog);
+ gtk_widget_realize (dialog);
+
+ if (priv->parent) {
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gdk_window_set_transient_for (GTK_WIDGET (dialog)->window, priv->parent);
+ }
+
gtk_dialog_run (GTK_DIALOG (dialog));
/* brasero-tool-dialog auto destroys itself */
@@ -436,6 +480,13 @@
}
if (!priv->is_running) {
+ gtk_widget_realize (dialog);
+
+ if (priv->parent) {
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gdk_window_set_transient_for (GTK_WIDGET (dialog)->window, priv->parent);
+ }
+
gtk_widget_show (dialog);
gtk_dialog_run (GTK_DIALOG (dialog));
@@ -458,6 +509,57 @@
}
static void
+brasero_app_current_toplevel_destroyed (GtkWidget *widget,
+ BraseroApp *app)
+{
+ BraseroAppPrivate *priv;
+
+ priv = BRASERO_APP_PRIVATE (app);
+ if (priv->is_running)
+ gtk_widget_show (GTK_WIDGET (app));
+}
+
+void
+brasero_app_set_toplevel (BraseroApp *app, GtkWindow *window)
+{
+ BraseroAppPrivate *priv;
+
+ priv = BRASERO_APP_PRIVATE (app);
+
+ if (!priv->is_running) {
+ if (priv->parent) {
+ gtk_widget_realize (GTK_WIDGET (window));
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+ gdk_window_set_transient_for (GTK_WIDGET (window)->window, priv->parent);
+ }
+ else {
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), FALSE);
+ gtk_window_set_skip_pager_hint (GTK_WINDOW (window), FALSE);
+ gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_NORMAL);
+ gtk_window_set_position (GTK_WINDOW (window),GTK_WIN_POS_CENTER);
+ }
+ }
+ else {
+ gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (app));
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+
+ /* hide main dialog if it is shown */
+ gtk_widget_hide (GTK_WIDGET (app));
+
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), FALSE);
+ gtk_window_set_skip_pager_hint (GTK_WINDOW (window), FALSE);
+ gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_NORMAL);
+ gtk_window_set_position (GTK_WINDOW (window),GTK_WIN_POS_CENTER);
+ }
+
+ gtk_widget_show (GTK_WIDGET (window));
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (brasero_app_current_toplevel_destroyed),
+ app);
+}
+
+static void
on_prefs_cb (GtkAction *action, BraseroApp *app)
{
GtkWidget *dialog;
Modified: trunk/src/brasero-app.h
==============================================================================
--- trunk/src/brasero-app.h (original)
+++ trunk/src/brasero-app.h Thu Dec 25 16:29:29 2008
@@ -55,6 +55,13 @@
brasero_app_get_default (void);
void
+brasero_app_set_parent (BraseroApp *app,
+ guint xid);
+
+void
+brasero_app_set_toplevel (BraseroApp *app, GtkWindow *window);
+
+void
brasero_app_run (BraseroApp *app);
gboolean
Modified: trunk/src/brasero-burn-dialog.c
==============================================================================
--- trunk/src/brasero-burn-dialog.c (original)
+++ trunk/src/brasero-burn-dialog.c Thu Dec 25 16:29:29 2008
@@ -1233,10 +1233,6 @@
gtk_window_set_default_size (GTK_WINDOW (obj), 500, 0);
gtk_dialog_set_has_separator (GTK_DIALOG (obj), FALSE);
- gtk_window_set_skip_taskbar_hint (GTK_WINDOW (obj), FALSE);
- gtk_window_set_skip_pager_hint (GTK_WINDOW (obj), FALSE);
- gtk_window_set_type_hint (GTK_WINDOW (obj), GDK_WINDOW_TYPE_HINT_NORMAL);
- gtk_window_set_position (GTK_WINDOW (obj),GTK_WIN_POS_CENTER);
obj->priv->tray = brasero_tray_icon_new ();
g_signal_connect (obj->priv->tray,
Modified: trunk/src/brasero-project-manager.c
==============================================================================
--- trunk/src/brasero-project-manager.c (original)
+++ trunk/src/brasero-project-manager.c Thu Dec 25 16:29:29 2008
@@ -517,30 +517,23 @@
brasero_project_manager_burn (BraseroProjectManager *manager,
BraseroBurnSession *session)
{
- GtkWidget *toplevel;
GtkWidget *dialog;
/* now setup the burn dialog */
dialog = brasero_burn_dialog_new ();
-
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel));
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- gtk_widget_hide (toplevel);
+ brasero_app_set_toplevel (brasero_app_get_default (), GTK_WINDOW (dialog));
gtk_widget_show (dialog);
- brasero_burn_dialog_run (BRASERO_BURN_DIALOG (dialog),
- session);
-
- gtk_widget_destroy (dialog);
+ brasero_burn_dialog_run (BRASERO_BURN_DIALOG (dialog), session);
brasero_project_manager_switch (manager,
BRASERO_PROJECT_TYPE_INVALID,
NULL,
NULL,
TRUE);
- gtk_widget_show (toplevel);
+
+ /* The destruction of the dialog will bring the main window forward */
+ gtk_widget_destroy (dialog);
}
static void
@@ -549,19 +542,13 @@
{
BraseroBurnSession *session;
GtkResponseType result;
- GtkWidget *toplevel;
GtkWidget *dialog;
/* setup, show, and run options dialog */
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
-
dialog = brasero_image_option_dialog_new ();
brasero_image_option_dialog_set_image_uri (BRASERO_IMAGE_OPTION_DIALOG (dialog), uri);
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel));
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ON_PARENT);
- gtk_widget_show (dialog);
+ brasero_app_set_toplevel (brasero_app_get_default (), GTK_WINDOW (dialog));
result = gtk_dialog_run (GTK_DIALOG (dialog));
if (result != GTK_RESPONSE_OK) {
@@ -579,6 +566,7 @@
}
session = brasero_burn_options_get_session (BRASERO_BURN_OPTIONS (dialog));
+ /* The destruction of the dialog will bring the main window forward */
gtk_widget_destroy (dialog);
brasero_project_manager_burn (manager, session);
@@ -600,16 +588,10 @@
{
BraseroBurnSession *session;
GtkResponseType result;
- GtkWidget *toplevel;
GtkWidget *dialog;
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
-
dialog = brasero_disc_copy_dialog_new ();
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel));
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ON_PARENT);
- gtk_widget_show (dialog);
+ brasero_app_set_toplevel (brasero_app_get_default (), GTK_WINDOW (dialog));
/* if a device is specified then get the corresponding medium */
if (device) {
@@ -640,6 +622,8 @@
}
session = brasero_burn_options_get_session (BRASERO_BURN_OPTIONS (dialog));
+
+ /* The destruction of the dialog will bring the main window forward */
gtk_widget_destroy (dialog);
/* Set a cover if any. */
Modified: trunk/src/brasero-project.c
==============================================================================
--- trunk/src/brasero-project.c (original)
+++ trunk/src/brasero-project.c Thu Dec 25 16:29:29 2008
@@ -896,7 +896,6 @@
{
BraseroBurnSession *session;
BraseroDiscResult result;
- GtkWidget *toplevel;
GtkWidget *dialog;
gboolean success;
@@ -929,11 +928,7 @@
brasero_disc_option_dialog_set_disc (BRASERO_DISC_OPTION_DIALOG (dialog),
project->priv->current);
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (project));
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel));
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ON_PARENT);
- gtk_widget_show (dialog);
+ brasero_app_set_toplevel (brasero_app_get_default (), GTK_WINDOW (dialog));
result = gtk_dialog_run (GTK_DIALOG (dialog));
if (result != GTK_RESPONSE_OK)
@@ -958,14 +953,8 @@
/* now setup the burn dialog */
dialog = brasero_burn_dialog_new ();
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel));
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- gtk_widget_hide (toplevel);
- gtk_widget_show (dialog);
-
- success = brasero_burn_dialog_run (BRASERO_BURN_DIALOG (dialog),
- session);
+ brasero_app_set_toplevel (brasero_app_get_default (), GTK_WINDOW (dialog));
+ success = brasero_burn_dialog_run (BRASERO_BURN_DIALOG (dialog), session);
g_object_unref (session);
project->priv->burnt = success;
@@ -973,8 +962,9 @@
end:
project->priv->is_burning = 0;
+
+ /* The destruction of the dialog will bring the main window forward */
gtk_widget_destroy (dialog);
- gtk_widget_show (toplevel);
}
/******************************** ******************************************/
Modified: trunk/src/main.c
==============================================================================
--- trunk/src/main.c (original)
+++ trunk/src/main.c Thu Dec 25 16:29:29 2008
@@ -69,16 +69,17 @@
gint disc_blank;
gint disc_check;
gint open_ncb;
+gint parent_window;
gint debug;
static const GOptionEntry options [] = {
- { "project", 'p', G_OPTION_FLAG_FILENAME, G_OPTION_ARG_STRING, &project_uri,
+ { "project", 'p', 0, G_OPTION_ARG_STRING, &project_uri,
N_("Open the specified project"),
N_("PROJECT") },
#ifdef BUILD_PLAYLIST
- { "playlist", 'l', G_OPTION_FLAG_FILENAME, G_OPTION_ARG_STRING, &playlist_uri,
+ { "playlist", 'l', 0, G_OPTION_ARG_STRING, &playlist_uri,
N_("Open the specified playlist as an audio project"),
N_("PLAYLIST") },
@@ -96,7 +97,7 @@
N_("Copy a disc"),
N_("PATH TO DEVICE") },
- { "cover", 'j', G_OPTION_FLAG_FILENAME, G_OPTION_ARG_STRING, &cover_project,
+ { "cover", 'j', 0, G_OPTION_ARG_STRING, &cover_project,
N_("Cover to use"),
N_("PATH TO COVER") },
@@ -104,7 +105,7 @@
N_("Open a video project adding the URIs given on the command line"),
NULL },
- { "image", 'i', G_OPTION_FLAG_FILENAME, G_OPTION_ARG_STRING, &iso_uri,
+ { "image", 'i', 0, G_OPTION_ARG_STRING, &iso_uri,
N_("Uri of an image file to be burnt (autodetected)"),
N_("PATH TO PLAYLIST") },
@@ -124,10 +125,14 @@
N_("Burn the contents of burn:// URI"),
NULL },
- { "burn-and-remove-project", 'r', G_OPTION_FLAG_FILENAME, G_OPTION_ARG_STRING, &burn_project_uri,
+ { "burn-and-remove-project", 'r', 0, G_OPTION_ARG_STRING, &burn_project_uri,
N_("Burn the specified project and REMOVE it.\nThis option is mainly useful for integration use with other applications."),
N_("PATH") },
+ { "transient-for", 'x', 0, G_OPTION_ARG_INT, &parent_window,
+ N_("Set brasero transient for the window with Xlib xid"),
+ N_("xid") },
+
{ "debug", 'g', 0, G_OPTION_ARG_NONE, &debug,
N_("Display debug statements on stdout"),
NULL },
@@ -176,6 +181,9 @@
manager = brasero_app_get_project_manager (app);
+ if (parent_window)
+ brasero_app_set_parent (app, parent_window);
+
if (empty_project) {
brasero_project_manager_empty (BRASERO_PROJECT_MANAGER (manager));
brasero_app_run (app);
@@ -481,7 +489,7 @@
brasero_enable_multi_DND ();
brasero_utils_init ();
- current_app = brasero_app_new ();
+ current_app = brasero_app_new (TRUE);
if (current_app == NULL)
return 1;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]