return s;
}
-
static gboolean viewer_grab_focus(GtkWidget *widget, GdkEventButton *event,
gpointer data)
{
- GtkWidget *viewer_container = GTK_WIDGET(data);
+ GtkWidget *viewer = GTK_WIDGET(data);
+ GtkWidget *viewer_container = gtk_widget_get_parent(viewer);
g_debug("FOCUS GRABBED");
- g_object_set_data(G_OBJECT(viewer_container), "focused_viewer", widget);
+ g_object_set_data(G_OBJECT(viewer_container), "focused_viewer", viewer);
+ return 0;
}
+static void connect_focus_recursive(GtkWidget *widget,
+ GtkWidget *viewer)
+{
+ if(GTK_IS_CONTAINER(widget)) {
+ gtk_container_forall(GTK_CONTAINER(widget),
+ (GtkCallback)connect_focus_recursive,
+ viewer);
+ }
+ gtk_widget_add_events(widget, GDK_BUTTON_PRESS_MASK);
+ g_signal_connect (G_OBJECT(widget),
+ "button-press-event",
+ G_CALLBACK (viewer_grab_focus),
+ (gpointer)viewer);
+}
/* insert_viewer function constructs an instance of a viewer first,
* then inserts the widget of the instance into the container of the
TRUE,
0);
- g_signal_connect (G_OBJECT(viewer),
- "button-press-event",
- G_CALLBACK (viewer_grab_focus),
- (gpointer)viewer_container);
-
- // We unref here, because it is now referenced by the viewer_container!
- // not for a box ... g_object_unref(G_OBJECT(viewer));
-
- // The viewer will show itself when it receives a show notify
- // So we call the show notify hooks here. It will
- // typically add hooks for reading, we call process trace, and the
- // end of reading hook will call gtk_widget_show and unregister the
- // hooks.
- // Note that show notify gets the time_requested through the call_data.
- //show_viewer(mw_data);
- // in expose now call_pending_read_hooks(mw_data);
+ /* We want to connect the viewer_grab_focus to EVERY
+ * child of this widget. The little trick is to get each child
+ * of each GTK_CONTAINER, even subchildren.
+ */
+ connect_focus_recursive(viewer, viewer);
}
}
}
}
+/* Get the currently focused viewer.
+ * If no viewer is focused, use the first one.
+ *
+ * If no viewer available, return NULL.
+ */
GtkWidget *viewer_container_focus(GtkWidget *container)
{
GtkWidget *widget;
widget = (GtkWidget*)g_object_get_data(G_OBJECT(container),
- "focused_viewer");
+ "focused_viewer");
- if(widget == NULL) g_debug("no widget focused");
+ if(widget == NULL) {
+ g_debug("no widget focused");
+ GList *children = gtk_container_get_children(GTK_CONTAINER(container));
+
+ if(children != NULL)
+ widget = GTK_WIDGET(children->data);
+ g_object_set_data(G_OBJECT(container),
+ "focused_viewer",
+ widget);
+ }
+
return widget;
/* start nanoseconds */
if(start_time.tv_sec == time_span.start_time.tv_sec) {
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
- (double)time_span.start_time.tv_nsec,
- (double)NANOSECONDS_PER_SECOND-1);
- }
- else if(start_time.tv_sec == time_span.end_time.tv_sec) {
- /* If we are at the end, max nsec to end.. -1 (not zero length) */
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
- 0.0,
- (double)time_span.end_time.tv_nsec-1);
- }
- else /* anywhere else */
+ /* can be both beginning and end at the same time. */
+ if(start_time.tv_sec == time_span.end_time.tv_sec) {
+ /* If we are at the end, max nsec to end.. -1 (not zero length) */
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
+ (double)time_span.start_time.tv_nsec,
+ (double)time_span.end_time.tv_nsec-1);
+ } else {
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
+ (double)time_span.start_time.tv_nsec,
+ (double)NANOSECONDS_PER_SECOND-1);
+ }
+ } else if(start_time.tv_sec == time_span.end_time.tv_sec) {
+ /* If we are at the end, max nsec to end.. -1 (not zero length) */
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
+ 0.0,
+ (double)time_span.end_time.tv_nsec-1);
+ } else /* anywhere else */
gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
0.0,
(double)NANOSECONDS_PER_SECOND-1);
/* end nanoseconds */
if(end_time.tv_sec == time_span.start_time.tv_sec) {
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4),
- (double)time_span.start_time.tv_nsec+1,
- (double)NANOSECONDS_PER_SECOND-1);
+ /* can be both beginning and end at the same time. */
+ if(end_time.tv_sec == time_span.end_time.tv_sec) {
+ /* If we are at the end, max nsec to end.. */
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4),
+ (double)time_span.start_time.tv_nsec+1,
+ (double)time_span.end_time.tv_nsec);
+ } else {
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4),
+ (double)time_span.start_time.tv_nsec+1,
+ (double)NANOSECONDS_PER_SECOND-1);
+ }
}
else if(end_time.tv_sec == time_span.end_time.tv_sec) {
/* If we are at the end, max nsec to end.. */
/* start nanoseconds */
if(new_time_window.start_time.tv_sec == time_span.start_time.tv_sec) {
- if(new_time_window.start_time.tv_nsec < time_span.start_time.tv_nsec)
- new_time_window.start_time.tv_nsec = time_span.start_time.tv_nsec;
+ if(new_time_window.start_time.tv_sec == time_span.end_time.tv_sec) {
+ if(new_time_window.start_time.tv_nsec > time_span.end_time.tv_nsec)
+ new_time_window.start_time.tv_nsec = time_span.end_time.tv_nsec-1;
+ if(new_time_window.start_time.tv_nsec < time_span.start_time.tv_nsec)
+ new_time_window.start_time.tv_nsec = time_span.start_time.tv_nsec;
+ } else {
+ if(new_time_window.start_time.tv_nsec < time_span.start_time.tv_nsec)
+ new_time_window.start_time.tv_nsec = time_span.start_time.tv_nsec;
+ }
}
else if(new_time_window.start_time.tv_sec == time_span.end_time.tv_sec) {
if(new_time_window.start_time.tv_nsec > time_span.end_time.tv_nsec)
/* end nanoseconds */
if(end_time.tv_sec == time_span.start_time.tv_sec) {
- if(end_time.tv_nsec < time_span.start_time.tv_nsec)
- end_time.tv_nsec = time_span.start_time.tv_nsec+1;
+ if(end_time.tv_sec == time_span.end_time.tv_sec) {
+ if(end_time.tv_nsec > time_span.end_time.tv_nsec)
+ end_time.tv_nsec = time_span.end_time.tv_nsec;
+ if(end_time.tv_nsec < time_span.start_time.tv_nsec)
+ end_time.tv_nsec = time_span.start_time.tv_nsec+1;
+ } else {
+ if(end_time.tv_nsec < time_span.start_time.tv_nsec)
+ end_time.tv_nsec = time_span.start_time.tv_nsec+1;
+ }
}
else if(end_time.tv_sec == time_span.end_time.tv_sec) {
if(end_time.tv_nsec > time_span.end_time.tv_nsec)
LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
TimeInterval time_span = tsc->time_span;
- tab->current_time = new_current_time;
-
/* current seconds */
gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry5),
(double)time_span.start_time.tv_sec,
(double)time_span.end_time.tv_sec);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry5),
+ (double)new_current_time.tv_sec);
+
/* start nanoseconds */
if(new_current_time.tv_sec == time_span.start_time.tv_sec) {
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
- (double)time_span.start_time.tv_nsec,
- (double)NANOSECONDS_PER_SECOND-1);
- }
- else if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
- /* If we are at the end, max nsec to end.. */
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
- 0.0,
- (double)time_span.end_time.tv_nsec);
- }
- else /* anywhere else */
+ /* can be both beginning and end at the same time. */
+ if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
+ /* If we are at the end, max nsec to end.. */
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
+ (double)time_span.start_time.tv_nsec,
+ (double)time_span.end_time.tv_nsec);
+ } else {
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
+ (double)time_span.start_time.tv_nsec,
+ (double)NANOSECONDS_PER_SECOND-1);
+ }
+ } else if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
+ /* If we are at the end, max nsec to end.. */
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
+ 0.0,
+ (double)time_span.end_time.tv_nsec);
+ } else /* anywhere else */
gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
0.0,
(double)NANOSECONDS_PER_SECOND-1);
+
gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry6),
(double)new_current_time.tv_nsec);
- lttvwindow_report_current_time(tab, tab->current_time);
+ set_current_time(tab, &new_current_time);
tab->current_time_manager_lock = FALSE;
}
/* current nanoseconds */
if(new_current_time.tv_sec == time_span.start_time.tv_sec) {
- if(new_current_time.tv_nsec < time_span.start_time.tv_nsec)
- new_current_time.tv_nsec = time_span.start_time.tv_nsec;
+ if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
+ if(new_current_time.tv_nsec > time_span.end_time.tv_nsec)
+ new_current_time.tv_nsec = time_span.end_time.tv_nsec;
+ if(new_current_time.tv_nsec < time_span.start_time.tv_nsec)
+ new_current_time.tv_nsec = time_span.start_time.tv_nsec;
+ } else {
+ if(new_current_time.tv_nsec < time_span.start_time.tv_nsec)
+ new_current_time.tv_nsec = time_span.start_time.tv_nsec;
+ }
}
else if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
if(new_current_time.tv_nsec > time_span.end_time.tv_nsec)