* starts.
*/
if(!lttvwindowtraces_background_request_find(trace, "state"))
* starts.
*/
if(!lttvwindowtraces_background_request_find(trace, "state"))
- lttvwindowtraces_background_request_queue(trace, "state");
+ lttvwindowtraces_background_request_queue(
+ main_window_get_widget(control_flow_data->tab), trace, "state");
lttvwindowtraces_background_notify_queue(control_flow_data,
trace,
ltt_time_infinite,
lttvwindowtraces_background_notify_queue(control_flow_data,
trace,
ltt_time_infinite,
* starts.
*/
if(!lttvwindowtraces_background_request_find(trace, "state"))
* starts.
*/
if(!lttvwindowtraces_background_request_find(trace, "state"))
- lttvwindowtraces_background_request_queue(trace, "state");
+ lttvwindowtraces_background_request_queue(
+ main_window_get_widget(event_viewer_data->tab), trace, "state");
lttvwindowtraces_background_notify_queue(event_viewer_data,
trace,
ltt_time_infinite,
lttvwindowtraces_background_notify_queue(event_viewer_data,
trace,
ltt_time_infinite,
#include <lttv/tracecontext.h>
#include <lttvwindow/lttvwindowtraces.h>
#include <lttvwindow/lttvwindow.h> // for CHUNK_NUM_EVENTS
#include <lttv/tracecontext.h>
#include <lttvwindow/lttvwindowtraces.h>
#include <lttvwindow/lttvwindow.h> // for CHUNK_NUM_EVENTS
+#include <lttvwindow/mainwindow-private.h> /* for main window structure */
+extern GSList * g_main_window_list;
typedef struct _BackgroundRequest {
LttvAttributeName module_name; /* Hook path in global attributes,
typedef struct _BackgroundRequest {
LttvAttributeName module_name; /* Hook path in global attributes,
i.e. modulename */
LttvTrace *trace; /* trace concerned */
GtkWidget *dialog; /* Dialog linked with the request, may be NULL */
i.e. modulename */
LttvTrace *trace; /* trace concerned */
GtkWidget *dialog; /* Dialog linked with the request, may be NULL */
+ GtkWidget *parent_window; /* Parent window the dialog must be transient for */
} BackgroundRequest;
typedef struct _BackgroundNotify {
} BackgroundRequest;
typedef struct _BackgroundNotify {
*
* The memory allocated for the request will be managed by the API.
*
*
* The memory allocated for the request will be managed by the API.
*
+ * @param widget the current Window
* @param trace the trace to compute
* @param module_name the name of the module which registered global computation
* hooks.
*/
void lttvwindowtraces_background_request_queue
* @param trace the trace to compute
* @param module_name the name of the module which registered global computation
* hooks.
*/
void lttvwindowtraces_background_request_queue
- (LttvTrace *trace, gchar *module_name)
+ (GtkWidget *widget, LttvTrace *trace, gchar *module_name)
{
BackgroundRequest *bg_req;
LttvAttribute *attribute = lttv_trace_attribute(trace);
{
BackgroundRequest *bg_req;
LttvAttribute *attribute = lttv_trace_attribute(trace);
g_info("Background computation for %s started for trace %p", module_name,
trace);
GtkWidget *dialog =
g_info("Background computation for %s started for trace %p", module_name,
trace);
GtkWidget *dialog =
- gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
+ gtk_message_dialog_new(
+ GTK_WINDOW(widget),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
"Background computation for %s started for trace %s",
module_name,
g_quark_to_string(ltt_trace_name(lttv_trace(trace))));
"Background computation for %s started for trace %s",
module_name,
g_quark_to_string(ltt_trace_name(lttv_trace(trace))));
+ gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(widget));
g_signal_connect_swapped (dialog, "response",
G_CALLBACK (destroy_dialog),
bg_req);
bg_req->dialog = dialog;
g_signal_connect_swapped (dialog, "response",
G_CALLBACK (destroy_dialog),
bg_req);
bg_req->dialog = dialog;
+ /* the parent window might vanish : only use this pointer for a
+ * comparison with existing windows */
+ bg_req->parent_window = gtk_widget_get_toplevel(widget);
gtk_widget_show(dialog);
}
gtk_widget_show(dialog);
}
+static gint find_window_widget(MainWindow *a, GtkWidget *b)
+{
+ if(a->mwindow == b) return 0;
+ else return -1;
+}
+
/* lttvwindowtraces_process_pending_requests
*
/* lttvwindowtraces_process_pending_requests
*
if(bg_req->dialog != NULL)
gtk_widget_destroy(bg_req->dialog);
if(bg_req->dialog != NULL)
gtk_widget_destroy(bg_req->dialog);
+ GtkWidget *parent_window;
+ if(g_slist_find_custom(g_main_window_list,
+ bg_req->parent_window,
+ (GCompareFunc)find_window_widget))
+ parent_window = GTK_WIDGET(bg_req->parent_window);
+ else
+ parent_window = NULL;
+
- gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
+ gtk_message_dialog_new(GTK_WINDOW(parent_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
"Background computation %s finished for trace %s",
g_quark_to_string(bg_req->module_name),
g_quark_to_string(ltt_trace_name(lttv_trace(bg_req->trace))));
"Background computation %s finished for trace %s",
g_quark_to_string(bg_req->module_name),
g_quark_to_string(ltt_trace_name(lttv_trace(bg_req->trace))));
+ if(parent_window != NULL)
+ gtk_window_set_transient_for(GTK_WINDOW(dialog),
+ GTK_WINDOW(parent_window));
g_signal_connect_swapped (dialog, "response",
G_CALLBACK (gtk_widget_destroy),
dialog);
g_signal_connect_swapped (dialog, "response",
G_CALLBACK (gtk_widget_destroy),
dialog);
#include <ltt/time.h>
#include <glib.h>
#include <ltt/time.h>
#include <glib.h>
typedef GQuark LttvTraceInfo;
typedef GQuark LttvTraceInfo;
*
* The memory allocated for the request will be managed by the API.
*
*
* The memory allocated for the request will be managed by the API.
*
+ * @param tab parent Window
* @param trace the trace to compute
* @param module_name the name of the module which registered global computation
* hooks.
*/
void lttvwindowtraces_background_request_queue
* @param trace the trace to compute
* @param module_name the name of the module which registered global computation
* hooks.
*/
void lttvwindowtraces_background_request_queue
- (LttvTrace *trace, gchar *module_name);
+ (GtkWidget *widget, LttvTrace *trace, gchar *module_name);
/**
* Remove a background request from a trace.
/**
* Remove a background request from a trace.
* starts.
*/
if(!lttvwindowtraces_background_request_find(trace, "stats"))
* starts.
*/
if(!lttvwindowtraces_background_request_find(trace, "stats"))
- lttvwindowtraces_background_request_queue(trace, "stats");
+ lttvwindowtraces_background_request_queue(
+ main_window_get_widget(svd->tab), trace, "stats");
lttvwindowtraces_background_notify_queue(svd,
trace,
ltt_time_infinite,
lttvwindowtraces_background_notify_queue(svd,
trace,
ltt_time_infinite,