示例#1
0
static void
gail_container_real_initialize (AtkObject *obj,
                                gpointer  data)
{
  GailContainer *container = GAIL_CONTAINER (obj);
  guint handler_id;

  ATK_OBJECT_CLASS (parent_class)->initialize (obj, data);

  container->children = gtk_container_get_children (GTK_CONTAINER (data));

  /*
   * We store the handler ids for these signals in case some objects
   * need to remove these handlers.
   */
  handler_id = g_signal_connect (data,
                                 "add",
                                 G_CALLBACK (gail_container_add_gtk),
                                 obj);
  g_object_set_data (G_OBJECT (obj), "gail-add-handler-id", 
                     GUINT_TO_POINTER (handler_id));
  handler_id = g_signal_connect (data,
                                 "remove",
                                 G_CALLBACK (gail_container_remove_gtk),
                                 obj);
  g_object_set_data (G_OBJECT (obj), "gail-remove-handler-id", 
                     GUINT_TO_POINTER (handler_id));

  if (GTK_IS_TOOLBAR (data))
    obj->role = ATK_ROLE_TOOL_BAR;
  else if (GTK_IS_VIEWPORT (data))
    obj->role = ATK_ROLE_VIEWPORT;
  else
    obj->role = ATK_ROLE_PANEL;
}
示例#2
0
static gboolean
wrap_table_child_focus_in (GtkWidget *widget,
                           GdkEventFocus *event,
                           gpointer data)
{
    gint x, y;
    GtkWidget *container, *viewport = NULL;

    container = gtk_widget_get_parent (widget);
    if (container)
    {
        viewport = gtk_widget_get_parent (container);
    }
    g_assert (container && viewport);
    g_assert (GTK_IS_VIEWPORT (viewport));
    g_return_val_if_fail (gtk_widget_get_realized (viewport), FALSE);

    if (!wrap_table_child_visible_in (widget, viewport))
    {
        GtkAdjustment *hadj, *vadj;

        hadj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (viewport));
        vadj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (viewport));

        gtk_widget_translate_coordinates (widget, container, 0, 0, &x, &y);

        gtk_adjustment_set_value (hadj, MIN (x, gtk_adjustment_get_upper(hadj) - gtk_adjustment_get_page_size(hadj)));
        gtk_adjustment_set_value (vadj, MIN (y, gtk_adjustment_get_upper(vadj) - gtk_adjustment_get_page_size(vadj)));
    }

    return FALSE;
}
示例#3
0
    //_____________________________________________
    GdkRectangle ToolBarStateData::dirtyRect( void )
    {

        GdkRectangle rect( Gtk::gdk_rectangle() );
        Gtk::gdk_rectangle_union( &_previous._rect, &_current._rect, &rect );

        // add _dirtyRect
        if( Gtk::gdk_rectangle_is_valid( &_dirtyRect ) )
        {
            Gtk::gdk_rectangle_union( &_dirtyRect, &rect, &rect );
            _dirtyRect = Gtk::gdk_rectangle();
        }

        // add followMouse dirtyRect
        if( followMouse() )
        {
            const GdkRectangle followMouseRect( FollowMouseData::dirtyRect() );
            Gtk::gdk_rectangle_union( &followMouseRect, &rect, &rect );
        }

        // check validity
        if( !Gtk::gdk_rectangle_is_valid( &rect ) ) return rect;

        /* Add viewport offsets if any */
        if( GTK_IS_VIEWPORT( _target ) )
        {
            gint xOffset, yOffset;
            Gtk::gtk_viewport_get_position( GTK_VIEWPORT( _target ), &xOffset, &yOffset );
            rect.x -= xOffset;
            rect.y -= yOffset;
        }

        /* Add extra margin to rect. FIXME: this should be triggered from widget's metrics */
        rect.x -= 2;
        rect.y -= 2;
        rect.width += 4;
        rect.height += 4;

        return rect;

    }