Esempio n. 1
0
static void
fm_compact_view_init (FMCompactView *compact_view)
{
    FMAbstractIconView *view = FM_ABSTRACT_ICON_VIEW (compact_view);

    /* initialize the icon view properties */
    exo_icon_view_set_layout_mode (view->icons, EXO_ICON_VIEW_LAYOUT_COLS);
    exo_icon_view_set_row_spacing (view->icons, 0);
    exo_icon_view_set_margin (view->icons, 3);
   
    g_object_set (G_OBJECT (compact_view), "text-beside-icons", TRUE, NULL);
    
    /* setup the icon renderer */
    g_object_set (FM_DIRECTORY_VIEW (view)->icon_renderer, "ypad", 0u, NULL);

    /* setup the name renderer (wrap only very long names) */
    g_object_set (FM_DIRECTORY_VIEW (view)->name_renderer,
                  "wrap-mode", PANGO_WRAP_WORD_CHAR,
                  "wrap-width", 1280,
                  "xalign", 0.0f,
                  "yalign", 0.5f,
                  NULL);

    g_settings_bind (marlin_compact_view_settings, "zoom-level", 
                     compact_view, "zoom-level", 0);

}
Esempio n. 2
0
static void 
fm_compact_view_zoom_level_changed (FMDirectoryView *view)
{
    g_return_if_fail (FM_IS_DIRECTORY_VIEW (view));

    /* set the zoom lvl for the name_renderer */
    g_object_set (FM_DIRECTORY_VIEW (view)->name_renderer, "zoom-level", view->zoom_level, NULL);

    /* set the new "size" for the icon renderer */
    g_object_set (FM_DIRECTORY_VIEW (view)->icon_renderer, "size", marlin_zoom_level_to_icon_size (view->zoom_level), NULL);

    exo_icon_view_invalidate_sizes (FM_ABSTRACT_ICON_VIEW (view)->icons);
}
Esempio n. 3
0
static gboolean fm_list_view_draw(GtkWidget* view_, cairo_t* cr, FMListView* view)
{
    g_return_val_if_fail(FM_IS_LIST_VIEW(view), FALSE);

    GOFDirectoryAsync *dir = fm_directory_view_get_current_directory (FM_DIRECTORY_VIEW (view));

    if (gof_directory_async_is_empty (dir))
    {
        PangoLayout* layout = gtk_widget_create_pango_layout(GTK_WIDGET(view), NULL);
        gchar *str = g_strconcat("<span size='x-large'>", _("This folder is empty."), "</span>", NULL);
        pango_layout_set_markup (layout, str, -1);

        PangoRectangle extents;
        /* Get hayout height and width */
        pango_layout_get_extents(layout, NULL, &extents);
        gdouble width = pango_units_to_double(extents.width);
        gdouble height = pango_units_to_double(extents.height);
        gtk_render_layout(gtk_widget_get_style_context(GTK_WIDGET(view)), cr,
                (double)gtk_widget_get_allocated_width(GTK_WIDGET(view))/2 - width/2,
                (double)gtk_widget_get_allocated_height(GTK_WIDGET(view))/2 - height/2,
                layout);
    }

    return FALSE;
}
Esempio n. 4
0
static void
fm_icon_container_unfreeze_updates (CajaIconContainer *container)
{
    FMIconView *icon_view;
    icon_view = get_icon_view (container);
    g_return_if_fail (icon_view != NULL);
    fm_directory_view_unfreeze_updates (FM_DIRECTORY_VIEW (icon_view));
}
Esempio n. 5
0
static void
fm_list_view_unfreeze_updates (FMListView *view)
{
    /*We're done editing - make the filename-cells readonly again.*/
	g_object_set (G_OBJECT (view->details->file_name_cell),
                  "editable", FALSE, NULL);
	fm_directory_view_unfreeze_updates (FM_DIRECTORY_VIEW (view));
}
Esempio n. 6
0
static void
fm_list_view_freeze_updates (FMListView *view)
{
    /* Make filename-cells editable. */
	g_object_set (G_OBJECT (view->details->file_name_cell),
                  "editable", TRUE, NULL);
    fm_directory_view_freeze_updates (FM_DIRECTORY_VIEW (view));
}
Esempio n. 7
0
static void
list_selection_changed_callback (GtkTreeSelection *selection, gpointer user_data)
{
    FMListView *view = FM_LIST_VIEW (user_data);

    if (view->details->selection != NULL)
        gof_file_list_free (view->details->selection);
    view->details->selection = get_selection (view);

    fm_directory_view_notify_selection_changed (FM_DIRECTORY_VIEW (view));
}
Esempio n. 8
0
static void
row_expanded_callback (GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *path, gpointer callback_data)
{
    FMListView *view;
    GOFDirectoryAsync *directory;

    view = FM_LIST_VIEW (callback_data);

    if (fm_list_model_load_subdirectory (view->model, path, &directory)) {
        fm_directory_view_add_subdirectory (FM_DIRECTORY_VIEW (view), directory);
    }
}
Esempio n. 9
0
static void
subdirectory_unloaded_callback (FMListModel *model,
                                GOFDirectoryAsync *directory,
                                gpointer callback_data)
{
    g_debug ("%s\n", G_STRFUNC);
    FMListView *view;

    g_return_if_fail (FM_IS_LIST_MODEL (model));
    g_return_if_fail (GOF_DIRECTORY_IS_ASYNC (directory));

    view = FM_LIST_VIEW(callback_data);

    fm_directory_view_remove_subdirectory (FM_DIRECTORY_VIEW (view), directory);
}
Esempio n. 10
0
static int
fm_desktop_icon_container_icons_compare (CajaIconContainer *container,
        CajaIconData      *data_a,
        CajaIconData      *data_b)
{
    CajaFile *file_a;
    CajaFile *file_b;
    FMDirectoryView *directory_view;
    SortCategory category_a, category_b;

    file_a = (CajaFile *) data_a;
    file_b = (CajaFile *) data_b;

    directory_view = FM_DIRECTORY_VIEW (FM_ICON_CONTAINER (container)->view);
    g_return_val_if_fail (directory_view != NULL, 0);

    category_a = get_sort_category (file_a);
    category_b = get_sort_category (file_b);

    if (category_a == category_b)
    {
        return caja_file_compare_for_sort
               (file_a, file_b, CAJA_FILE_SORT_BY_DISPLAY_NAME,
                fm_directory_view_should_sort_directories_first (directory_view),
                FALSE);
    }

    if (category_a < category_b)
    {
        return -1;
    }
    else
    {
        return +1;
    }
}
Esempio n. 11
0
static CajaIconInfo *
fm_icon_container_get_icon_images (CajaIconContainer *container,
                                   CajaIconData      *data,
                                   int                    size,
                                   GList                **emblem_pixbufs,
                                   char                 **embedded_text,
                                   gboolean               for_drag_accept,
                                   gboolean               need_large_embeddded_text,
                                   gboolean              *embedded_text_needs_loading,
                                   gboolean              *has_window_open)
{
    FMIconView *icon_view;
    char **emblems_to_ignore;
    CajaFile *file;
    gboolean use_embedding;
    CajaFileIconFlags flags;
    guint emblem_size;

    file = (CajaFile *) data;

    g_assert (CAJA_IS_FILE (file));
    icon_view = get_icon_view (container);
    g_return_val_if_fail (icon_view != NULL, NULL);

    use_embedding = FALSE;
    if (embedded_text)
    {
        *embedded_text = caja_file_peek_top_left_text (file, need_large_embeddded_text, embedded_text_needs_loading);
        use_embedding = *embedded_text != NULL;
    }

    if (emblem_pixbufs != NULL)
    {
        emblem_size = caja_icon_get_emblem_size_for_icon_size (size);
        /* don't return images larger than the actual icon size */
        emblem_size = MIN (emblem_size, size);

        if (emblem_size > 0)
        {
            emblems_to_ignore = fm_directory_view_get_emblem_names_to_exclude
                                (FM_DIRECTORY_VIEW (icon_view));
            *emblem_pixbufs = caja_file_get_emblem_pixbufs (file,
                              emblem_size,
                              FALSE,
                              emblems_to_ignore);
            g_strfreev (emblems_to_ignore);
        }
    }

    *has_window_open = caja_file_has_open_window (file);

    flags = CAJA_FILE_ICON_FLAGS_USE_MOUNT_ICON_AS_EMBLEM;
    if (!fm_icon_view_is_compact (icon_view) ||
            caja_icon_container_get_zoom_level (container) > CAJA_ZOOM_LEVEL_STANDARD)
    {
        flags |= CAJA_FILE_ICON_FLAGS_USE_THUMBNAILS;
        if (fm_icon_view_is_compact (icon_view))
        {
            flags |= CAJA_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE;
        }
    }

    if (use_embedding)
    {
        flags |= CAJA_FILE_ICON_FLAGS_EMBEDDING_TEXT;
    }
    if (for_drag_accept)
    {
        flags |= CAJA_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT;
    }

    return caja_file_get_icon (file, size, flags);
}
Esempio n. 12
0
static void
create_and_set_up_tree_view (FMListView *view)
{
    int k;
    GtkTreeViewColumn       *col;
    GtkCellRenderer         *renderer;

    view->model = FM_DIRECTORY_VIEW (view)->model;
    g_object_set (G_OBJECT (view->model), "has-child", TRUE, NULL);

    view->tree = GTK_TREE_VIEW (exo_tree_view_new ());
    gtk_tree_view_set_model (view->tree, GTK_TREE_MODEL (view->model));

    gtk_tree_view_set_search_column (view->tree, FM_LIST_MODEL_FILENAME);
    gtk_tree_view_set_rubber_banding (view->tree, TRUE);
    gtk_tree_view_set_rules_hint (view->tree, TRUE);

    g_signal_connect (view->tree, "item-hovered", G_CALLBACK (fm_list_view_item_hovered), view);
    g_signal_connect_object (gtk_tree_view_get_selection (view->tree), "changed",
                             G_CALLBACK (list_selection_changed_callback), view, 0);

    g_signal_connect_object (view->tree, "button-press-event",
                             G_CALLBACK (button_press_callback), view, 0);
    g_signal_connect (view->tree, "draw",
                             G_CALLBACK (fm_list_view_draw), view);
    g_signal_connect_object (view->tree, "key_press_event",
                             G_CALLBACK (key_press_callback), view, 0);
    g_signal_connect_object (view->tree, "row_expanded",
                             G_CALLBACK (row_expanded_callback), view, 0);
    g_signal_connect_object (view->tree, "row_collapsed",
                             G_CALLBACK (row_collapsed_callback), view, 0);
    g_signal_connect_object (view->tree, "row-activated",
                             G_CALLBACK (row_activated_callback), view, 0);

    gtk_tree_selection_set_mode (gtk_tree_view_get_selection (view->tree), GTK_SELECTION_MULTIPLE);

    g_signal_connect_object (view->model, "subdirectory_unloaded",
                             G_CALLBACK (subdirectory_unloaded_callback), view, 0);

    for(k=FM_LIST_MODEL_FILENAME; k< FM_LIST_MODEL_NUM_COLUMNS; k++) {
        if (k == FM_LIST_MODEL_FILENAME) {
            col = gtk_tree_view_column_new ();
            view->details->file_name_column = col;
            gtk_tree_view_column_set_sort_column_id  (col,k);
            gtk_tree_view_column_set_resizable (col, TRUE);
            gtk_tree_view_column_set_title (col, gettext(col_title[k-FM_LIST_MODEL_FILENAME]));
            gtk_tree_view_column_set_expand (col, TRUE);

            /* add the icon renderer */
            gtk_tree_view_column_pack_start (col, FM_DIRECTORY_VIEW (view)->icon_renderer, FALSE);
            gtk_tree_view_column_set_attributes (col, FM_DIRECTORY_VIEW (view)->icon_renderer,
                                                 "file",  FM_LIST_MODEL_FILE_COLUMN, NULL);

            renderer = marlin_cell_renderer_text_ellipsized_new ();
           	view->details->file_name_cell = (GtkCellRendererText *) renderer;
            g_signal_connect (renderer, "edited", G_CALLBACK (cell_renderer_edited), view);
			g_signal_connect (renderer, "editing-canceled", G_CALLBACK (cell_renderer_editing_canceled), view);
			g_signal_connect (renderer, "editing-started", G_CALLBACK (cell_renderer_editing_started_cb), view);

            gtk_tree_view_column_pack_start (col, renderer, TRUE);
            gtk_tree_view_column_set_cell_data_func (col, renderer,
                                                     (GtkTreeCellDataFunc) filename_cell_data_func,
                                                     view, NULL);
        } else {
            renderer = gtk_cell_renderer_text_new( );
            col = gtk_tree_view_column_new_with_attributes(gettext(col_title[k-FM_LIST_MODEL_FILENAME]), renderer, "text", k, NULL);
            gtk_tree_view_column_set_sort_column_id  (col,k);
            gtk_tree_view_column_set_resizable (col, TRUE);
            //gtk_tree_view_column_set_fixed_width (col, 240);
            //amtest
            gtk_tree_view_column_set_cell_data_func (col, renderer,
                                                     (GtkTreeCellDataFunc) color_row_func,
                                                     NULL, NULL);
        }

        gtk_tree_view_append_column(view->tree, col);
    }
    gtk_widget_show (GTK_WIDGET (view->tree));
    gtk_container_add (GTK_CONTAINER (view), GTK_WIDGET (view->tree));
}
Esempio n. 13
0
static gboolean
key_press_callback (GtkWidget *widget, GdkEventKey *event, gpointer callback_data)
{
    FMDirectoryView *view;
    //GdkEventButton button_event = { 0 };
    gboolean handled;
    GtkTreeView *tree_view;
    GtkTreePath *path;

    tree_view = GTK_TREE_VIEW (widget);

    view = FM_DIRECTORY_VIEW (callback_data);
    handled = FALSE;

    switch (event->keyval) {
    case GDK_KEY_F10:
        if (event->state & GDK_CONTROL_MASK) {
            fm_directory_view_do_popup_menu (view, (GdkEventButton *) event);
            handled = TRUE;
        }
        break;
    case GDK_KEY_Right:
        gtk_tree_view_get_cursor (tree_view, &path, NULL);
        if (path) {
            gtk_tree_view_expand_row (tree_view, path, FALSE);
            gtk_tree_path_free (path);
        }
        handled = TRUE;
        break;
    case GDK_KEY_Left:
        gtk_tree_view_get_cursor (tree_view, &path, NULL);
        if (path) {
            gtk_tree_view_collapse_row (tree_view, path);
            gtk_tree_path_free (path);
        }
        handled = TRUE;
        break;
    case GDK_KEY_space:
        if (event->state & GDK_CONTROL_MASK) {
            handled = FALSE;
            break;
        }
        if (!gtk_widget_has_focus (GTK_WIDGET (tree_view))) {
            handled = FALSE;
            break;
        }
        if ((event->state & GDK_SHIFT_MASK) != 0) {
            /* alternate */
            fm_directory_view_activate_selected_items (view, MARLIN_WINDOW_OPEN_FLAG_NEW_TAB);
        } else {
            fm_directory_view_preview_selected_items (view);
        }
        handled = TRUE;
        break;
    case GDK_KEY_Return:
    case GDK_KEY_KP_Enter:
        if ((event->state & GDK_SHIFT_MASK) != 0) {
            /* alternate */
            fm_directory_view_activate_selected_items (view, MARLIN_WINDOW_OPEN_FLAG_NEW_TAB);
        } else {
            fm_directory_view_activate_selected_items (view, MARLIN_WINDOW_OPEN_FLAG_DEFAULT);
        }
        handled = TRUE;
        break;

    default:
        handled = FALSE;
    }

    return handled;
}
Esempio n. 14
0
static gboolean
button_press_callback (GtkTreeView *tree_view, GdkEventButton *event, FMListView *view)
{
    GtkTreeSelection    *selection;
    GtkTreePath         *path;
    GtkTreeIter         iter;
    GtkAction           *action;
    GOFFile             *file;

    selection = gtk_tree_view_get_selection (tree_view);
    /* check if the event is for the bin window */
    if (G_UNLIKELY (event->window != gtk_tree_view_get_bin_window (tree_view)))
        return FALSE;

    /* we unselect all selected items if the user clicks on an empty
     * area of the treeview and no modifier key is active.
     */
    if ((event->state & gtk_accelerator_get_default_mod_mask ()) == 0
        && !gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, NULL, NULL, NULL, NULL))
    {
        gtk_tree_selection_unselect_all (selection);
    }

    /* open the context menu on right clicks */
    if (event->type == GDK_BUTTON_PRESS && event->button == 3)
    {
        if (gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, &path, NULL, NULL, NULL))
        {
            /* select the path on which the user clicked if not selected yet */
            if (!gtk_tree_selection_path_is_selected (selection, path))
            {
                /* we don't unselect all other items if Control is active */
                if ((event->state & GDK_CONTROL_MASK) == 0)
                    gtk_tree_selection_unselect_all (selection);
                if (!gtk_tree_view_is_blank_at_pos (tree_view, event->x, event->y, NULL, NULL, NULL, NULL)	&& gtk_tree_path_get_depth (path) == 1) 
                    gtk_tree_selection_select_path (selection, path);
            }
            
            gtk_tree_path_free (path);
        }
        /* queue the menu popup */
        fm_directory_view_queue_popup (FM_DIRECTORY_VIEW (view), event);

        return TRUE;
    }
    else if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_2BUTTON_PRESS) && event->button == 2)
    {
        /* determine the path to the item that was middle-clicked */
        if (gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, &path, NULL, NULL, NULL))
        {
            /* select only the path to the item on which the user clicked */
            gtk_tree_selection_unselect_all (selection);
            gtk_tree_selection_select_path (selection, path);

            fm_directory_view_activate_selected_items (FM_DIRECTORY_VIEW (view), MARLIN_WINDOW_OPEN_FLAG_NEW_TAB);

            /* cleanup */
            gtk_tree_path_free (path);
        } 

        return TRUE;
    }

    return FALSE;
}
Esempio n. 15
0
static void
row_activated_callback (GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *path, FMListView *view)
{
    g_debug ("%s\n", G_STRFUNC);
    fm_directory_view_activate_selected_items (FM_DIRECTORY_VIEW (view), MARLIN_WINDOW_OPEN_FLAG_DEFAULT);
}
Esempio n. 16
0
static void
fm_list_view_item_hovered (ExoTreeView *exo_tree, GtkTreePath *path, FMListView *view)
{
    fm_directory_view_notify_item_hovered (FM_DIRECTORY_VIEW (view), path);
}