void _exo_gtk_widget_send_focus_change (GtkWidget *widget, gboolean in) { GdkEvent *fevent; #if !GTK_CHECK_VERSION(2, 22, 0) g_object_ref (G_OBJECT (widget)); #endif gtk_widget_set_can_focus (widget, in); fevent = gdk_event_new (GDK_FOCUS_CHANGE); fevent->focus_change.type = GDK_FOCUS_CHANGE; fevent->focus_change.window = g_object_ref (gtk_widget_get_window (widget)); fevent->focus_change.in = in; #if GTK_CHECK_VERSION(2, 22, 0) gtk_widget_send_focus_change (widget, fevent); #else if (in) GTK_OBJECT_FLAGS (widget) |= GTK_HAS_FOCUS; else GTK_OBJECT_FLAGS (widget) &= ~(GTK_HAS_FOCUS); gtk_widget_event (widget, fevent); g_object_notify (G_OBJECT (widget), "has-focus"); g_object_unref (G_OBJECT (widget)); #endif gdk_event_free (fevent); }
/* Virtual functions */ static void e_reflow_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GnomeCanvasItem *item; EReflow *reflow; item = GNOME_CANVAS_ITEM (object); reflow = E_REFLOW (object); switch (prop_id){ case PROP_HEIGHT: reflow->height = g_value_get_double (value); reflow->need_reflow_columns = TRUE; e_canvas_item_request_reflow(item); break; case PROP_MINIMUM_WIDTH: reflow->minimum_width = g_value_get_double (value); if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS(object)) set_empty(reflow); e_canvas_item_request_reflow(item); break; case PROP_EMPTY_MESSAGE: g_free(reflow->empty_message); reflow->empty_message = g_strdup(g_value_get_string (value)); if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS(object)) set_empty(reflow); break; case PROP_MODEL: connect_model (reflow, (EReflowModel *) g_value_get_object (value)); break; case PROP_COLUMN_WIDTH: if (reflow->column_width != g_value_get_double (value)) { GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)); double old_width = reflow->column_width; reflow->column_width = g_value_get_double (value); adjustment->step_increment = (reflow->column_width + E_REFLOW_FULL_GUTTER) / 2; adjustment->page_increment = adjustment->page_size - adjustment->step_increment; gtk_adjustment_changed(adjustment); e_reflow_resize_children(item); e_canvas_item_request_reflow(item); reflow->need_column_resize = TRUE; gnome_canvas_item_request_update(item); if (old_width != reflow->column_width) column_width_changed (reflow); } break; } }
static void show_search () { GtkWidget *w, *f, *a, *e; GdkEvent *fev; w = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (gtk_widget_get_toplevel (text_view))); gtk_window_set_position (GTK_WINDOW (w), GTK_WIN_POS_CENTER_ON_PARENT); /* next two lines needs for get focus to search window */ gtk_window_set_type_hint (GTK_WINDOW (w), GDK_WINDOW_TYPE_HINT_UTILITY); gtk_window_set_modal (GTK_WINDOW (w), TRUE); g_signal_connect (G_OBJECT (w), "key-press-event", G_CALLBACK (search_key_cb), w); f = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (f), GTK_SHADOW_ETCHED_IN); gtk_container_add (GTK_CONTAINER (w), f); a = gtk_alignment_new (0.5, 0.5, 1.0, 1.0); gtk_alignment_set_padding (GTK_ALIGNMENT (a), 2, 2, 2, 2); gtk_container_add (GTK_CONTAINER (f), a); e = gtk_entry_new (); if (pattern) gtk_entry_set_text (GTK_ENTRY (e), pattern); gtk_container_add (GTK_CONTAINER (a), e); g_signal_connect (G_OBJECT (e), "activate", G_CALLBACK (do_search), w); g_signal_connect (G_OBJECT (e), "changed", G_CALLBACK (search_changed), NULL); g_signal_connect (G_OBJECT (e), "key-press-event", G_CALLBACK (search_key_cb), w); gtk_widget_show_all (w); /* send focus event to search entry (so complex due to popup window) */ fev = gdk_event_new (GDK_FOCUS_CHANGE); fev->focus_change.type = GDK_FOCUS_CHANGE; fev->focus_change.in = TRUE; fev->focus_change.window = gtk_widget_get_window (e); if (fev->focus_change.window != NULL) g_object_ref (fev->focus_change.window); #if GTK_CHECK_VERSION(2,22,0) gtk_widget_send_focus_change (e, fev); #else g_object_ref (e); GTK_OBJECT_FLAGS (e) |= GTK_HAS_FOCUS; gtk_widget_event (e, fev); g_object_notify (G_OBJECT (e), "has-focus"); g_object_unref (e); #endif gdk_event_free (fev); }
static void e_reflow_reflow( GnomeCanvasItem *item, int flags ) { EReflow *reflow = E_REFLOW(item); gdouble old_width; gdouble running_width; gdouble running_height; int next_column; int i; if (! (GTK_OBJECT_FLAGS (reflow) & GNOME_CANVAS_ITEM_REALIZED)) return; if (reflow->need_reflow_columns) { reflow_columns (reflow); } old_width = reflow->width; running_width = E_REFLOW_BORDER_WIDTH; running_height = E_REFLOW_BORDER_WIDTH; next_column = 1; for (i = 0; i < reflow->count; i++) { int unsorted = e_sorter_sorted_to_model (E_SORTER (reflow->sorter), i); if (next_column < reflow->column_count && i == reflow->columns[next_column]) { running_height = E_REFLOW_BORDER_WIDTH; running_width += reflow->column_width + E_REFLOW_FULL_GUTTER; next_column ++; } if (unsorted >= 0 && reflow->items[unsorted]) { e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(reflow->items[unsorted]), (double) running_width, (double) running_height); running_height += reflow->heights[unsorted] + E_REFLOW_BORDER_WIDTH; } } reflow->width = running_width + reflow->column_width + E_REFLOW_BORDER_WIDTH; if ( reflow->width < reflow->minimum_width ) reflow->width = reflow->minimum_width; if (old_width != reflow->width) e_canvas_item_request_parent_reflow(item); }
guint32 c_gtk_object_get_flags (GtkObject* object) { return GTK_OBJECT_FLAGS(object); }
static void etgc_reflow (GnomeCanvasItem *item, gint flags) { ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(item); gboolean frozen; g_object_get (etgc, "frozen", &frozen, NULL); if (frozen) return; if (GTK_OBJECT_FLAGS(etgc)& GNOME_CANVAS_ITEM_REALIZED){ gdouble running_height = 0; gdouble running_width = 0; gdouble old_height; gdouble old_width; old_height = etgc->height; old_width = etgc->width; if (etgc->children == NULL){ } else { GList *list; gdouble extra_height = 0; gdouble item_height = 0; gdouble item_width = 0; if (etgc->font_desc) { PangoContext *context; PangoFontMetrics *metrics; context = gtk_widget_get_pango_context (GTK_WIDGET (item->canvas)); metrics = pango_context_get_metrics (context, etgc->font_desc, NULL); extra_height += PANGO_PIXELS (pango_font_metrics_get_ascent (metrics)) + PANGO_PIXELS (pango_font_metrics_get_descent (metrics)) + BUTTON_PADDING * 2; pango_font_metrics_unref (metrics); } extra_height = MAX(extra_height, BUTTON_HEIGHT + BUTTON_PADDING * 2); running_height = extra_height; for ( list = etgc->children; list; list = g_list_next (list)){ ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *) list->data; ETableGroup *child = child_node->child; g_object_get (child, "width", &item_width, NULL); if (item_width > running_width) running_width = item_width; } for ( list = etgc->children; list; list = g_list_next (list)){ ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *) list->data; ETableGroup *child = child_node->child; g_object_get (child, "height", &item_height, NULL); e_canvas_item_move_absolute (GNOME_CANVAS_ITEM(child_node->text), GROUP_INDENT, running_height - BUTTON_PADDING); e_canvas_item_move_absolute (GNOME_CANVAS_ITEM(child), GROUP_INDENT, running_height); gnome_canvas_item_set (GNOME_CANVAS_ITEM(child_node->rect), "x1", (double) 0, "x2", (double) running_width + GROUP_INDENT, "y1", (double) running_height - extra_height, "y2", (double) running_height + item_height, NULL); running_height += item_height + extra_height; } running_height -= extra_height; } if (running_height != old_height || running_width != old_width) { etgc->height = running_height; etgc->width = running_width; e_canvas_item_request_parent_reflow (item); } } }