diff options
author | Mike Engber <engber@src.gnome.org> | 2000-06-27 01:17:44 +0000 |
---|---|---|
committer | Mike Engber <engber@src.gnome.org> | 2000-06-27 01:17:44 +0000 |
commit | c108999dc357b83621676ffa8b16f228005adb88 (patch) | |
tree | 67af889518891b7133792055d199ea864615e987 | |
parent | a77ea1f8fab0cd6e4e6414be78d282f8deb8cb00 (diff) | |
download | nautilus-c108999dc357b83621676ffa8b16f228005adb88.tar.gz |
Added report_zoom_parameters_changed to the zoomable interface. This
* libnautilus-extensions/nautilus-gtk-extensions.c:
(nautilus_gtk_marshal_NONE__DOUBLE_DOUBLE_DOUBLE):
* libnautilus-extensions/nautilus-gtk-extensions.h:
* libnautilus/nautilus-view-component.idl:
* libnautilus/nautilus-zoomable.c:
(nautilus_zoomable_set_parameters),
(nautilus_zoomable_set_zoom_level):
* libnautilus/nautilus-zoomable.h:
* src/file-manager/fm-directory-view.c:
(fm_directory_view_set_zoom_level),
(fm_directory_view_set_zoom_parameters):
* src/file-manager/fm-directory-view.h:
* src/file-manager/fm-icon-view.c: (fm_icon_view_begin_loading),
(fm_icon_view_set_zoom_level), (fm_icon_view_init_zoom_params),
(fm_icon_view_bump_zoom_level), (fm_icon_view_zoom_to_level),
(fm_icon_view_restore_default_zoom_level):
* src/file-manager/fm-list-view.c: (fm_list_view_bump_zoom_level),
(fm_list_view_zoom_to_level),
(fm_list_view_restore_default_zoom_level),
(fm_list_view_begin_loading), (fm_list_view_set_zoom_level),
(fm_list_view_init_zoom_params):
* src/nautilus-view-frame-private.h:
* src/nautilus-view-frame.c:
(nautilus_view_frame_initialize_class),
(nautilus_view_frame_zoom_parameters_changed):
* src/nautilus-view-frame.h:
* src/nautilus-window.c:
(nautilus_window_zoom_level_changed_callback),
(nautilus_window_zoom_parameters_changed_callback),
(nautilus_window_connect_view):
* src/nautilus-zoom-control.c: (nautilus_zoom_control_initialize),
(draw_number_and_disable_arrows), (zoom_menu_callback),
(create_zoom_menu_item),
(nautilus_zoom_control_button_press_event),
(nautilus_zoom_control_set_zoom_level),
(nautilus_zoom_control_set_min_zoom_level),
(nautilus_zoom_control_set_max_zoom_level),
(nautilus_zoom_control_get_zoom_level),
(nautilus_zoom_control_get_min_zoom_level),
(nautilus_zoom_control_get_max_zoom_level):
* src/nautilus-zoom-control.h:
* src/nautilus-zoomable-frame-corba.c:
(impl_Nautilus_ZoomableFrame_report_zoom_level_changed),
(impl_Nautilus_ZoomableFrame_report_zoom_parameters_changed):
Added report_zoom_parameters_changed to the zoomable
interface. This allows the zoom control to get min/max
from the zoomable (as opposed to hard coding in values)
Also fixed the zoom control to now use just doubles.
Renamed the zoom_level_changed message to be report_zoom_level_changed
in accordance with convention.
-rw-r--r-- | ChangeLog | 53 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-gtk-extensions.c | 14 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-gtk-extensions.h | 4 | ||||
-rw-r--r-- | libnautilus-private/nautilus-gtk-extensions.c | 14 | ||||
-rw-r--r-- | libnautilus-private/nautilus-gtk-extensions.h | 4 | ||||
-rw-r--r-- | libnautilus/nautilus-view-component.idl | 6 | ||||
-rw-r--r-- | libnautilus/nautilus-zoomable.c | 33 | ||||
-rw-r--r-- | libnautilus/nautilus-zoomable.h | 26 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.c | 15 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.h | 6 | ||||
-rw-r--r-- | src/file-manager/fm-icon-view.c | 31 | ||||
-rw-r--r-- | src/file-manager/fm-list-view.c | 37 | ||||
-rw-r--r-- | src/nautilus-navigation-window.c | 22 | ||||
-rw-r--r-- | src/nautilus-object-window.c | 22 | ||||
-rw-r--r-- | src/nautilus-spatial-window.c | 22 | ||||
-rw-r--r-- | src/nautilus-view-frame-private.h | 6 | ||||
-rw-r--r-- | src/nautilus-view-frame.c | 19 | ||||
-rw-r--r-- | src/nautilus-view-frame.h | 4 | ||||
-rw-r--r-- | src/nautilus-window.c | 22 | ||||
-rw-r--r-- | src/nautilus-zoom-control.c | 105 | ||||
-rw-r--r-- | src/nautilus-zoom-control.h | 9 | ||||
-rw-r--r-- | src/nautilus-zoomable-frame-corba.c | 28 |
22 files changed, 385 insertions, 117 deletions
@@ -1,3 +1,56 @@ +2000-06-26 Michael Engber <engber@eazel.com> + + * libnautilus-extensions/nautilus-gtk-extensions.c: + (nautilus_gtk_marshal_NONE__DOUBLE_DOUBLE_DOUBLE): + * libnautilus-extensions/nautilus-gtk-extensions.h: + * libnautilus/nautilus-view-component.idl: + * libnautilus/nautilus-zoomable.c: + (nautilus_zoomable_set_parameters), + (nautilus_zoomable_set_zoom_level): + * libnautilus/nautilus-zoomable.h: + * src/file-manager/fm-directory-view.c: + (fm_directory_view_set_zoom_level), + (fm_directory_view_set_zoom_parameters): + * src/file-manager/fm-directory-view.h: + * src/file-manager/fm-icon-view.c: (fm_icon_view_begin_loading), + (fm_icon_view_set_zoom_level), (fm_icon_view_init_zoom_params), + (fm_icon_view_bump_zoom_level), (fm_icon_view_zoom_to_level), + (fm_icon_view_restore_default_zoom_level): + * src/file-manager/fm-list-view.c: (fm_list_view_bump_zoom_level), + (fm_list_view_zoom_to_level), + (fm_list_view_restore_default_zoom_level), + (fm_list_view_begin_loading), (fm_list_view_set_zoom_level), + (fm_list_view_init_zoom_params): + * src/nautilus-view-frame-private.h: + * src/nautilus-view-frame.c: + (nautilus_view_frame_initialize_class), + (nautilus_view_frame_zoom_parameters_changed): + * src/nautilus-view-frame.h: + * src/nautilus-window.c: + (nautilus_window_zoom_level_changed_callback), + (nautilus_window_zoom_parameters_changed_callback), + (nautilus_window_connect_view): + * src/nautilus-zoom-control.c: (nautilus_zoom_control_initialize), + (draw_number_and_disable_arrows), (zoom_menu_callback), + (create_zoom_menu_item), + (nautilus_zoom_control_button_press_event), + (nautilus_zoom_control_set_zoom_level), + (nautilus_zoom_control_set_min_zoom_level), + (nautilus_zoom_control_set_max_zoom_level), + (nautilus_zoom_control_get_zoom_level), + (nautilus_zoom_control_get_min_zoom_level), + (nautilus_zoom_control_get_max_zoom_level): + * src/nautilus-zoom-control.h: + * src/nautilus-zoomable-frame-corba.c: + (impl_Nautilus_ZoomableFrame_report_zoom_level_changed), + (impl_Nautilus_ZoomableFrame_report_zoom_parameters_changed): + Added report_zoom_parameters_changed to the zoomable + interface. This allows the zoom control to get min/max + from the zoomable (as opposed to hard coding in values) + Also fixed the zoom control to now use just doubles. + Renamed the zoom_level_changed message to be report_zoom_level_changed + in accordance with convention. + 2000-06-26 John Sullivan <sullivan@eazel.com> Finished task 876 (owner and group should be changeable diff --git a/libnautilus-extensions/nautilus-gtk-extensions.c b/libnautilus-extensions/nautilus-gtk-extensions.c index 7870387ee..2fbe550c6 100644 --- a/libnautilus-extensions/nautilus-gtk-extensions.c +++ b/libnautilus-extensions/nautilus-gtk-extensions.c @@ -515,6 +515,20 @@ nautilus_gtk_marshal_NONE__DOUBLE (GtkObject *object, } void +nautilus_gtk_marshal_NONE__DOUBLE_DOUBLE_DOUBLE (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args) +{ + (* (void (*)(GtkObject *, double, double, double, gpointer)) func) + (object, + GTK_VALUE_DOUBLE (args[0]), + GTK_VALUE_DOUBLE (args[1]), + GTK_VALUE_DOUBLE (args[2]), + func_data); +} + +void nautilus_gtk_marshal_POINTER__NONE (GtkObject *object, GtkSignalFunc func, gpointer func_data, diff --git a/libnautilus-extensions/nautilus-gtk-extensions.h b/libnautilus-extensions/nautilus-gtk-extensions.h index 58182a8e0..9182a8ada 100644 --- a/libnautilus-extensions/nautilus-gtk-extensions.h +++ b/libnautilus-extensions/nautilus-gtk-extensions.h @@ -131,6 +131,10 @@ void nautilus_gtk_marshal_NONE__DOUBLE GtkSignalFunc func, gpointer func_data, GtkArg *args); +void nautilus_gtk_marshal_NONE__DOUBLE_DOUBLE_DOUBLE (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args); void nautilus_gtk_marshal_NONE__INT_INT_INT (GtkObject *object, GtkSignalFunc func, gpointer func_data, diff --git a/libnautilus-private/nautilus-gtk-extensions.c b/libnautilus-private/nautilus-gtk-extensions.c index 7870387ee..2fbe550c6 100644 --- a/libnautilus-private/nautilus-gtk-extensions.c +++ b/libnautilus-private/nautilus-gtk-extensions.c @@ -515,6 +515,20 @@ nautilus_gtk_marshal_NONE__DOUBLE (GtkObject *object, } void +nautilus_gtk_marshal_NONE__DOUBLE_DOUBLE_DOUBLE (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args) +{ + (* (void (*)(GtkObject *, double, double, double, gpointer)) func) + (object, + GTK_VALUE_DOUBLE (args[0]), + GTK_VALUE_DOUBLE (args[1]), + GTK_VALUE_DOUBLE (args[2]), + func_data); +} + +void nautilus_gtk_marshal_POINTER__NONE (GtkObject *object, GtkSignalFunc func, gpointer func_data, diff --git a/libnautilus-private/nautilus-gtk-extensions.h b/libnautilus-private/nautilus-gtk-extensions.h index 58182a8e0..9182a8ada 100644 --- a/libnautilus-private/nautilus-gtk-extensions.h +++ b/libnautilus-private/nautilus-gtk-extensions.h @@ -131,6 +131,10 @@ void nautilus_gtk_marshal_NONE__DOUBLE GtkSignalFunc func, gpointer func_data, GtkArg *args); +void nautilus_gtk_marshal_NONE__DOUBLE_DOUBLE_DOUBLE (GtkObject *object, + GtkSignalFunc func, + gpointer func_data, + GtkArg *args); void nautilus_gtk_marshal_NONE__INT_INT_INT (GtkObject *object, GtkSignalFunc func, gpointer func_data, diff --git a/libnautilus/nautilus-view-component.idl b/libnautilus/nautilus-view-component.idl index f1196fd32..2d98ebca8 100644 --- a/libnautilus/nautilus-view-component.idl +++ b/libnautilus/nautilus-view-component.idl @@ -124,8 +124,12 @@ module Nautilus { * zoom_level_changed whenever it changes the zoom level (on * its own or due to calls from the zoomable interface). */ + interface ZoomableFrame : ::Bonobo::Unknown { - oneway void zoom_level_changed (in double zoom_level); + oneway void report_zoom_level_changed (in double zoom_level); + oneway void report_zoom_parameters_changed (in double zoom_level, + in double min_zoom_level, + in double max_zoom_level); }; }; diff --git a/libnautilus/nautilus-zoomable.c b/libnautilus/nautilus-zoomable.c index 6be65ffbe..609bc3c0f 100644 --- a/libnautilus/nautilus-zoomable.c +++ b/libnautilus/nautilus-zoomable.c @@ -458,6 +458,37 @@ nautilus_zoomable_ensure_zoomable_frame (NautilusZoomable *view) } void +nautilus_zoomable_set_parameters (NautilusZoomable *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level) +{ + CORBA_Environment ev; + + g_return_if_fail (NAUTILUS_IS_ZOOMABLE (view)); + + CORBA_exception_init (&ev); + + view->details->zoom_level = zoom_level; + view->details->min_zoom_level = min_zoom_level; + view->details->max_zoom_level = max_zoom_level; + + if (nautilus_zoomable_ensure_zoomable_frame (view)) { + Nautilus_ZoomableFrame_report_zoom_parameters_changed (view->details->zoomable_frame, + view->details->zoom_level, + view->details->min_zoom_level, + view->details->max_zoom_level, + &ev); + if (ev._major != CORBA_NO_EXCEPTION) { + CORBA_Object_release (view->details->zoomable_frame, &ev); + view->details->zoomable_frame = CORBA_OBJECT_NIL; + } + } + + CORBA_exception_free (&ev); +} + +void nautilus_zoomable_set_zoom_level (NautilusZoomable *view, double zoom_level) { @@ -470,7 +501,7 @@ nautilus_zoomable_set_zoom_level (NautilusZoomable *view, view->details->zoom_level = zoom_level; if (nautilus_zoomable_ensure_zoomable_frame (view)) { - Nautilus_ZoomableFrame_zoom_level_changed (view->details->zoomable_frame, zoom_level, &ev); + Nautilus_ZoomableFrame_report_zoom_level_changed (view->details->zoomable_frame, zoom_level, &ev); if (ev._major != CORBA_NO_EXCEPTION) { CORBA_Object_release (view->details->zoomable_frame, &ev); view->details->zoomable_frame = CORBA_OBJECT_NIL; diff --git a/libnautilus/nautilus-zoomable.h b/libnautilus/nautilus-zoomable.h index 1bcc6eafa..1b17b1e6c 100644 --- a/libnautilus/nautilus-zoomable.h +++ b/libnautilus/nautilus-zoomable.h @@ -69,18 +69,22 @@ struct NautilusZoomable NautilusZoomableDetails *details; }; -GtkType nautilus_zoomable_get_type (void); -NautilusZoomable *nautilus_zoomable_new (GtkWidget *widget, - gdouble min_zoom_level, - gdouble max_zoom_level, +GtkType nautilus_zoomable_get_type (void); +NautilusZoomable *nautilus_zoomable_new (GtkWidget *widget, + gdouble min_zoom_level, + gdouble max_zoom_level, gboolean is_continuous); -NautilusZoomable *nautilus_zoomable_new_from_bonobo_control (BonoboControl *bonobo_control, - gdouble min_zoom_level, - gdouble max_zoom_level, - gboolean is_continuous); -void nautilus_zoomable_set_zoom_level (NautilusZoomable *view, - gdouble zoom_level); -BonoboControl *nautilus_zoomable_get_bonobo_control (NautilusZoomable *view); +NautilusZoomable *nautilus_zoomable_new_from_bonobo_control (BonoboControl *bonobo_control, + gdouble min_zoom_level, + gdouble max_zoom_level, + gboolean is_continuous); +void nautilus_zoomable_set_parameters (NautilusZoomable *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level); +void nautilus_zoomable_set_zoom_level (NautilusZoomable *view, + gdouble zoom_level); +BonoboControl *nautilus_zoomable_get_bonobo_control (NautilusZoomable *view); #ifdef __cplusplus } diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index 083c7635d..595edceab 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -1425,13 +1425,26 @@ fm_directory_view_zoom_to_level (FMDirectoryView *view, int zoom_level) void -fm_directory_view_report_zoom_level_changed (FMDirectoryView *view, int zoom_level) +fm_directory_view_set_zoom_level (FMDirectoryView *view, int zoom_level) { g_return_if_fail (FM_IS_DIRECTORY_VIEW (view)); nautilus_zoomable_set_zoom_level (view->details->zoomable, (double) nautilus_get_icon_size_for_zoom_level (zoom_level) / NAUTILUS_ICON_SIZE_STANDARD); } +void +fm_directory_view_set_zoom_parameters (FMDirectoryView *view, + int zoom_level, + int min_zoom_level, + int max_zoom_level) +{ + g_return_if_fail (FM_IS_DIRECTORY_VIEW (view)); + nautilus_zoomable_set_parameters (view->details->zoomable, + (double) nautilus_get_icon_size_for_zoom_level (zoom_level) / NAUTILUS_ICON_SIZE_STANDARD, + (double) nautilus_get_icon_size_for_zoom_level (min_zoom_level) / NAUTILUS_ICON_SIZE_STANDARD, + (double) nautilus_get_icon_size_for_zoom_level (max_zoom_level) / NAUTILUS_ICON_SIZE_STANDARD); +} + /** * fm_directory_view_restore_default_zoom_level: * diff --git a/src/file-manager/fm-directory-view.h b/src/file-manager/fm-directory-view.h index 057413210..63d9b4635 100644 --- a/src/file-manager/fm-directory-view.h +++ b/src/file-manager/fm-directory-view.h @@ -232,8 +232,12 @@ void fm_directory_view_bump_zoom_level (FMDirectory int zoom_increment); void fm_directory_view_zoom_to_level (FMDirectoryView *view, int zoom_level); -void fm_directory_view_report_zoom_level_changed (FMDirectoryView *view, +void fm_directory_view_set_zoom_level (FMDirectoryView *view, int zoom_level); +void fm_directory_view_set_zoom_parameters (FMDirectoryView *view, + int zoom_level, + int min_zoom_level, + int max_zoom_level); void fm_directory_view_restore_default_zoom_level (FMDirectoryView *view); void fm_directory_view_select_all (FMDirectoryView *view); void fm_directory_view_set_selection (FMDirectoryView *view, diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c index 32bd58bcb..adcc02184 100644 --- a/src/file-manager/fm-icon-view.c +++ b/src/file-manager/fm-icon-view.c @@ -80,7 +80,9 @@ static void fm_icon_view_initialize (FMIconView static void fm_icon_view_initialize_class (FMIconViewClass *klass); static void fm_icon_view_set_zoom_level (FMIconView *view, NautilusZoomLevel new_level, - gboolean always_report_new_level); + gboolean notify_directory_view); +static void fm_icon_view_init_zoom_params (FMIconView *view, + NautilusZoomLevel zoom_level); static void text_attribute_names_changed_callback (gpointer user_data); NAUTILUS_DEFINE_CLASS_BOILERPLATE (FMIconView, fm_icon_view, FM_TYPE_DIRECTORY_VIEW); @@ -644,7 +646,7 @@ fm_icon_view_begin_loading (FMDirectoryView *view) (directory, NAUTILUS_METADATA_KEY_ICON_VIEW_ZOOM_LEVEL, icon_view->details->default_zoom_level); - fm_icon_view_set_zoom_level (icon_view, level, TRUE); + fm_icon_view_init_zoom_params (icon_view, level); /* Set the sort mode from the metadata. * It's OK not to resort the icons because the @@ -686,7 +688,7 @@ fm_icon_view_get_zoom_level (FMIconView *view) static void fm_icon_view_set_zoom_level (FMIconView *view, NautilusZoomLevel new_level, - gboolean always_report_new_level) + gboolean notify_directory_view) { NautilusIconContainer *icon_container; @@ -696,9 +698,6 @@ fm_icon_view_set_zoom_level (FMIconView *view, icon_container = get_icon_container (view); if (nautilus_icon_container_get_zoom_level (icon_container) == new_level) { - if (always_report_new_level) { - fm_directory_view_report_zoom_level_changed(&view->parent, new_level); - } return; } @@ -709,7 +708,9 @@ fm_icon_view_set_zoom_level (FMIconView *view, new_level); nautilus_icon_container_set_zoom_level (icon_container, new_level); - fm_directory_view_report_zoom_level_changed(&view->parent, new_level); + if (notify_directory_view) { + fm_directory_view_set_zoom_level (&view->parent, new_level); + } /* Reset default to new level; this way any change in zoom level * will "stick" until the user visits a directory that had its zoom @@ -718,6 +719,16 @@ fm_icon_view_set_zoom_level (FMIconView *view, view->details->default_zoom_level = new_level; } +static void +fm_icon_view_init_zoom_params (FMIconView *view, + NautilusZoomLevel zoom_level) +{ + fm_icon_view_set_zoom_level (view, zoom_level, FALSE); + fm_directory_view_set_zoom_parameters (&view->parent, + zoom_level, + NAUTILUS_ZOOM_LEVEL_SMALLEST, + NAUTILUS_ZOOM_LEVEL_LARGEST); +} static void fm_icon_view_bump_zoom_level (FMDirectoryView *view, int zoom_increment) @@ -729,7 +740,7 @@ fm_icon_view_bump_zoom_level (FMDirectoryView *view, int zoom_increment) icon_view = FM_ICON_VIEW (view); new_level = fm_icon_view_get_zoom_level (icon_view) + zoom_increment; - fm_icon_view_set_zoom_level(icon_view, new_level, FALSE); + fm_icon_view_set_zoom_level(icon_view, new_level, TRUE); } static void @@ -740,7 +751,7 @@ fm_icon_view_zoom_to_level (FMDirectoryView *view, int zoom_level) g_return_if_fail (FM_IS_ICON_VIEW (view)); icon_view = FM_ICON_VIEW (view); - fm_icon_view_set_zoom_level(icon_view, zoom_level, FALSE); + fm_icon_view_set_zoom_level(icon_view, zoom_level, TRUE); } static void @@ -751,7 +762,7 @@ fm_icon_view_restore_default_zoom_level (FMDirectoryView *view) g_return_if_fail (FM_IS_ICON_VIEW (view)); icon_view = FM_ICON_VIEW (view); - fm_icon_view_set_zoom_level(icon_view, NAUTILUS_ZOOM_LEVEL_STANDARD, FALSE); + fm_icon_view_set_zoom_level(icon_view, NAUTILUS_ZOOM_LEVEL_STANDARD, TRUE); } static gboolean diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c index 2a359f0f1..eb4c38d10 100644 --- a/src/file-manager/fm-list-view.c +++ b/src/file-manager/fm-list-view.c @@ -142,7 +142,9 @@ static void fm_list_view_select_all (FMDirectoryVi static void fm_list_view_set_selection (FMDirectoryView *view, GList *selection); static void fm_list_view_set_zoom_level (FMListView *list_view, NautilusZoomLevel new_level, - gboolean always_report_new_level); + gboolean notify_directory_view); +static void fm_list_view_init_zoom_params (FMListView *list_view, + NautilusZoomLevel zoom_level); static void fm_list_view_sort_items (FMListView *list_view, int column, gboolean reversed); @@ -853,7 +855,7 @@ fm_list_view_bump_zoom_level (FMDirectoryView *view, int zoom_increment) NAUTILUS_ZOOM_LEVEL_LARGEST); } - fm_list_view_set_zoom_level (list_view, new_level, FALSE); + fm_list_view_set_zoom_level (list_view, new_level, TRUE); } static void @@ -865,7 +867,7 @@ fm_list_view_zoom_to_level (FMDirectoryView *view, int zoom_level) list_view = FM_LIST_VIEW (view); - fm_list_view_set_zoom_level (list_view, zoom_level, FALSE); + fm_list_view_set_zoom_level (list_view, zoom_level, TRUE); } static void @@ -878,7 +880,7 @@ fm_list_view_restore_default_zoom_level (FMDirectoryView *view) list_view = FM_LIST_VIEW (view); /* The list view is using NAUTILUS_ZOOM_LEVEL_SMALLER as default */ - fm_list_view_set_zoom_level (list_view, NAUTILUS_ZOOM_LEVEL_SMALLER, FALSE); + fm_list_view_set_zoom_level (list_view, NAUTILUS_ZOOM_LEVEL_SMALLER, TRUE); } static gboolean @@ -940,13 +942,12 @@ fm_list_view_begin_loading (FMDirectoryView *view) nautilus_connect_background_to_directory_metadata (GTK_WIDGET (get_list (list_view)), directory); - fm_list_view_set_zoom_level ( + fm_list_view_init_zoom_params ( list_view, nautilus_directory_get_integer_metadata ( directory, NAUTILUS_METADATA_KEY_LIST_VIEW_ZOOM_LEVEL, - list_view->details->default_zoom_level), - TRUE); + list_view->details->default_zoom_level)); fm_list_view_sort_items ( list_view, @@ -1074,7 +1075,7 @@ fm_list_view_get_zoom_level (FMListView *list_view) static void fm_list_view_set_zoom_level (FMListView *list_view, NautilusZoomLevel new_level, - gboolean always_report_new_level) + gboolean notify_directory_view) { GtkCList *clist; int row; @@ -1085,9 +1086,6 @@ fm_list_view_set_zoom_level (FMListView *list_view, new_level <= NAUTILUS_ZOOM_LEVEL_LARGEST); if (new_level == fm_list_view_get_zoom_level (list_view)) { - if (always_report_new_level) { - fm_directory_view_report_zoom_level_changed(&list_view->parent, new_level); - } return; } @@ -1097,8 +1095,10 @@ fm_list_view_set_zoom_level (FMListView *list_view, NAUTILUS_METADATA_KEY_LIST_VIEW_ZOOM_LEVEL, list_view->details->default_zoom_level, new_level); - - fm_directory_view_report_zoom_level_changed(&list_view->parent, new_level); + + if (notify_directory_view) { + fm_directory_view_set_zoom_level (&list_view->parent, new_level); + } /* Reset default to new level; this way any change in zoom level * will "stick" until the user visits a directory that had its zoom @@ -1138,6 +1138,17 @@ fm_list_view_set_zoom_level (FMListView *list_view, } static void +fm_list_view_init_zoom_params (FMListView *view, + NautilusZoomLevel zoom_level) +{ + fm_list_view_set_zoom_level (view, zoom_level, FALSE); + fm_directory_view_set_zoom_parameters (&view->parent, + zoom_level, + NAUTILUS_ZOOM_LEVEL_SMALLEST, + NAUTILUS_ZOOM_LEVEL_LARGEST); +} + +static void fm_list_view_reset_row_height (FMListView *list_view) { gtk_clist_set_row_height (GTK_CLIST (get_list (list_view)), diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c index 3f803e272..1e5340e83 100644 --- a/src/nautilus-navigation-window.c +++ b/src/nautilus-navigation-window.c @@ -1135,8 +1135,25 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view, nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), zoom_level); /* We rely on the initial zoom_level_change signal to inform us that the - * view-frame is showing something zoombale (i.e. we need a zoom control). - */ + * view-frame is showing a new zoomable. + */ + gtk_widget_show (window->zoom_control); +} + +static void +nautilus_window_zoom_parameters_changed_callback (NautilusViewFrame *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level, + NautilusWindow *window) +{ + nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), zoom_level); + nautilus_zoom_control_set_min_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), min_zoom_level); + nautilus_zoom_control_set_max_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), max_zoom_level); + + /* We rely on the initial zoom_level_change signal to inform us that the + * view-frame is showing a new zoomable. + */ gtk_widget_show (window->zoom_control); } @@ -1160,6 +1177,7 @@ nautilus_window_connect_view (NautilusWindow *window, NautilusViewFrame *view) CONNECT (report_load_failed); CONNECT (set_title); CONNECT (zoom_level_changed); + CONNECT (zoom_parameters_changed); #undef CONNECT diff --git a/src/nautilus-object-window.c b/src/nautilus-object-window.c index 3f803e272..1e5340e83 100644 --- a/src/nautilus-object-window.c +++ b/src/nautilus-object-window.c @@ -1135,8 +1135,25 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view, nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), zoom_level); /* We rely on the initial zoom_level_change signal to inform us that the - * view-frame is showing something zoombale (i.e. we need a zoom control). - */ + * view-frame is showing a new zoomable. + */ + gtk_widget_show (window->zoom_control); +} + +static void +nautilus_window_zoom_parameters_changed_callback (NautilusViewFrame *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level, + NautilusWindow *window) +{ + nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), zoom_level); + nautilus_zoom_control_set_min_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), min_zoom_level); + nautilus_zoom_control_set_max_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), max_zoom_level); + + /* We rely on the initial zoom_level_change signal to inform us that the + * view-frame is showing a new zoomable. + */ gtk_widget_show (window->zoom_control); } @@ -1160,6 +1177,7 @@ nautilus_window_connect_view (NautilusWindow *window, NautilusViewFrame *view) CONNECT (report_load_failed); CONNECT (set_title); CONNECT (zoom_level_changed); + CONNECT (zoom_parameters_changed); #undef CONNECT diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c index 3f803e272..1e5340e83 100644 --- a/src/nautilus-spatial-window.c +++ b/src/nautilus-spatial-window.c @@ -1135,8 +1135,25 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view, nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), zoom_level); /* We rely on the initial zoom_level_change signal to inform us that the - * view-frame is showing something zoombale (i.e. we need a zoom control). - */ + * view-frame is showing a new zoomable. + */ + gtk_widget_show (window->zoom_control); +} + +static void +nautilus_window_zoom_parameters_changed_callback (NautilusViewFrame *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level, + NautilusWindow *window) +{ + nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), zoom_level); + nautilus_zoom_control_set_min_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), min_zoom_level); + nautilus_zoom_control_set_max_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), max_zoom_level); + + /* We rely on the initial zoom_level_change signal to inform us that the + * view-frame is showing a new zoomable. + */ gtk_widget_show (window->zoom_control); } @@ -1160,6 +1177,7 @@ nautilus_window_connect_view (NautilusWindow *window, NautilusViewFrame *view) CONNECT (report_load_failed); CONNECT (set_title); CONNECT (zoom_level_changed); + CONNECT (zoom_parameters_changed); #undef CONNECT diff --git a/src/nautilus-view-frame-private.h b/src/nautilus-view-frame-private.h index 22cf073a7..caa2d6554 100644 --- a/src/nautilus-view-frame-private.h +++ b/src/nautilus-view-frame-private.h @@ -67,7 +67,11 @@ void nautilus_view_frame_set_title (NautilusViewFrame /* Zoomable */ void nautilus_view_frame_zoom_level_changed (NautilusViewFrame *view, - double level); + double zoom_level); +void nautilus_view_frame_zoom_parameters_changed (NautilusViewFrame *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level); struct NautilusViewComponentType { const char *primary_repoid; diff --git a/src/nautilus-view-frame.c b/src/nautilus-view-frame.c index f4c151f58..ec79e004a 100644 --- a/src/nautilus-view-frame.c +++ b/src/nautilus-view-frame.c @@ -51,6 +51,7 @@ enum { REPORT_LOAD_FAILED, SET_TITLE, ZOOM_LEVEL_CHANGED, + ZOOM_PARAMETERS_CHANGED, CLIENT_GONE, LAST_SIGNAL }; @@ -161,6 +162,15 @@ nautilus_view_frame_initialize_class (NautilusViewFrameClass *klass) nautilus_gtk_marshal_NONE__DOUBLE, GTK_TYPE_NONE, 1, GTK_TYPE_DOUBLE); + signals[ZOOM_PARAMETERS_CHANGED] = + gtk_signal_new ("zoom_parameters_changed", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (NautilusViewFrameClass, + zoom_parameters_changed), + nautilus_gtk_marshal_NONE__DOUBLE_DOUBLE_DOUBLE, + GTK_TYPE_NONE, 3, GTK_TYPE_DOUBLE, GTK_TYPE_DOUBLE, GTK_TYPE_DOUBLE); + signals[CLIENT_GONE] = gtk_signal_new ("client_gone", GTK_RUN_LAST, @@ -708,6 +718,15 @@ nautilus_view_frame_zoom_level_changed (NautilusViewFrame *view, gtk_signal_emit (GTK_OBJECT (view), signals[ZOOM_LEVEL_CHANGED], level); } +void +nautilus_view_frame_zoom_parameters_changed (NautilusViewFrame *view, + double level, + double min, + double max) +{ + g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + gtk_signal_emit (GTK_OBJECT (view), signals[ZOOM_PARAMETERS_CHANGED], level, min, max); +} static gboolean check_object(NautilusViewFrame *view) diff --git a/src/nautilus-view-frame.h b/src/nautilus-view-frame.h index 047f25b65..e9d85d6b4 100644 --- a/src/nautilus-view-frame.h +++ b/src/nautilus-view-frame.h @@ -101,6 +101,10 @@ typedef struct { /* Part of Nautilus::ZoomableFrame CORBA interface. */ void (* zoom_level_changed) (NautilusViewFrame *view, double zoom_level); + void (* zoom_parameters_changed) (NautilusViewFrame *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level); /* Error handling for when client goes away. */ void (* client_gone) (NautilusViewFrame *view); diff --git a/src/nautilus-window.c b/src/nautilus-window.c index 3f803e272..1e5340e83 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -1135,8 +1135,25 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view, nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), zoom_level); /* We rely on the initial zoom_level_change signal to inform us that the - * view-frame is showing something zoombale (i.e. we need a zoom control). - */ + * view-frame is showing a new zoomable. + */ + gtk_widget_show (window->zoom_control); +} + +static void +nautilus_window_zoom_parameters_changed_callback (NautilusViewFrame *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level, + NautilusWindow *window) +{ + nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), zoom_level); + nautilus_zoom_control_set_min_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), min_zoom_level); + nautilus_zoom_control_set_max_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), max_zoom_level); + + /* We rely on the initial zoom_level_change signal to inform us that the + * view-frame is showing a new zoomable. + */ gtk_widget_show (window->zoom_control); } @@ -1160,6 +1177,7 @@ nautilus_window_connect_view (NautilusWindow *window, NautilusViewFrame *view) CONNECT (report_load_failed); CONNECT (set_title); CONNECT (zoom_level_changed); + CONNECT (zoom_parameters_changed); #undef CONNECT diff --git a/src/nautilus-zoom-control.c b/src/nautilus-zoom-control.c index 8bdc8e16e..4ccf98b11 100644 --- a/src/nautilus-zoom-control.c +++ b/src/nautilus-zoom-control.c @@ -59,8 +59,6 @@ static int nautilus_zoom_control_expose (GtkWidget *widget, GdkEventExpose *event); static gboolean nautilus_zoom_control_button_press_event (GtkWidget *widget, GdkEventButton *event); -static void set_zoom_level (NautilusZoomControl *zoom_control, - int new_level); void draw_number_and_disable_arrows (GtkWidget *widget, GdkRectangle *box); @@ -156,10 +154,9 @@ nautilus_zoom_control_initialize (NautilusZoomControl *zoom_control) char *file_name; GtkWidget *pix_widget; - zoom_control->current_zoom = NAUTILUS_ZOOM_LEVEL_STANDARD; - zoom_control->min_zoom = NAUTILUS_ZOOM_LEVEL_SMALLEST; - zoom_control->max_zoom = NAUTILUS_ZOOM_LEVEL_LARGEST; - zoom_control->zoom_factor = 1.0; + zoom_control->zoom_level = 1.0; + zoom_control->min_zoom_level = 0.0; + zoom_control->max_zoom_level = 4.0; /* allocate the pixmap that holds the image */ @@ -190,7 +187,7 @@ void draw_number_and_disable_arrows(GtkWidget *widget, GdkRectangle *box) label_font = gdk_font_load("-bitstream-courier-medium-r-normal-*-9-*-*-*-*-*-*-*"); temp_gc = gdk_gc_new(widget->window); - percent = floor((100.0 * zoom_control->zoom_factor) + .5); + percent = floor((100.0 * zoom_control->zoom_level) + .5); g_snprintf(buffer, 8, "%d", percent); x = (box->width - gdk_string_width(label_font, buffer)) >> 1; @@ -201,9 +198,9 @@ void draw_number_and_disable_arrows(GtkWidget *widget, GdkRectangle *box) /* clear the arrows if necessary */ - if (zoom_control->current_zoom == zoom_control->min_zoom) + if (zoom_control->zoom_level <= zoom_control->min_zoom_level) gdk_draw_rectangle (widget->window, widget->style->bg_gc[0], TRUE, 0, 0, box->width / 4, box->height); - else if (zoom_control->current_zoom == zoom_control->max_zoom) + else if (zoom_control->zoom_level >= zoom_control->max_zoom_level) gdk_draw_rectangle (widget->window, widget->style->bg_gc[0], TRUE, box->width - (box->width / 4), 0, box->width / 4, box->height); gdk_gc_unref(temp_gc); @@ -256,19 +253,13 @@ zoom_menu_callback (GtkMenuItem *item, gpointer callback_data) zoom_control = NAUTILUS_ZOOM_CONTROL (callback_data); /* Check to see if we can zoom out */ - if ((zoom_level < zoom_control->current_zoom && zoom_level >= zoom_control->min_zoom) || - (zoom_level > zoom_control->current_zoom && zoom_level <= zoom_control->max_zoom)) { + if ((zoom_control->min_zoom_level <= zoom_level && zoom_level < zoom_control->zoom_level) || + (zoom_control->zoom_level < zoom_level && zoom_level <= zoom_control->max_zoom_level)) { gtk_signal_emit (GTK_OBJECT (zoom_control), signals[ZOOM_TO_LEVEL], zoom_level); } } static void -zoom_menu_item_free_zoom_level (gpointer zoom_level_ptr) -{ - g_free (zoom_level_ptr); -} - -static void create_zoom_menu_item (GtkMenu *menu, GtkWidget *zoom_control, const char *item_text, double zoom_level) { @@ -280,7 +271,7 @@ create_zoom_menu_item (GtkMenu *menu, GtkWidget *zoom_control, zoom_level_ptr = g_new (double, 1); *zoom_level_ptr = zoom_level; - gtk_object_set_data_full (GTK_OBJECT (menu_item), "zoom_level", zoom_level_ptr, zoom_menu_item_free_zoom_level); + gtk_object_set_data_full (GTK_OBJECT (menu_item), "zoom_level", zoom_level_ptr, g_free); gtk_signal_connect (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (zoom_menu_callback), zoom_control); @@ -305,15 +296,6 @@ create_zoom_menu(GtkWidget *zoom_control) return menu; } -static void -set_zoom_level(NautilusZoomControl *zoom_control, int new_level) -{ - gtk_widget_queue_draw (GTK_WIDGET (zoom_control)); - zoom_control->current_zoom = new_level; - zoom_control->zoom_factor = (double) nautilus_get_icon_size_for_zoom_level - (zoom_control->current_zoom) / NAUTILUS_ICON_SIZE_STANDARD; -} - /* handle button presses */ static gboolean @@ -335,9 +317,9 @@ nautilus_zoom_control_button_press_event (GtkWidget *widget, GdkEventButton *eve return TRUE; } - if (event->x < (width / 3) && (zoom_control->current_zoom > zoom_control->min_zoom)) { + if (event->x < (width / 3) && (zoom_control->zoom_level > zoom_control->min_zoom_level)) { gtk_signal_emit (GTK_OBJECT (widget), signals[ZOOM_OUT]); - } else if ((event->x > ((2 * width) / 3)) && (zoom_control->current_zoom < zoom_control->max_zoom)) { + } else if ((event->x > ((2 * width) / 3)) && (zoom_control->zoom_level < zoom_control->max_zoom_level)) { gtk_signal_emit (GTK_OBJECT (widget), signals[ZOOM_IN]); } else if ((event->x >= (center - (width >> 3))) && (event->x <= (center + (width >> 3)))) { gtk_signal_emit (GTK_OBJECT (widget), signals[ZOOM_DEFAULT]); @@ -354,12 +336,6 @@ nautilus_zoom_control_button_press_event (GtkWidget *widget, GdkEventButton *eve return TRUE; } -void -nautilus_zoom_control_reset_zoom_level (NautilusZoomControl *zoom_control) -{ - set_zoom_level (zoom_control, NAUTILUS_ZOOM_LEVEL_STANDARD); -} - /* * FIXME bugzila.eazel.com 1425: * @@ -380,33 +356,44 @@ nautilus_zoom_control_reset_zoom_level (NautilusZoomControl *zoom_control) * doubles. */ -static NautilusZoomLevel -nautilus_zoom_level_from_double(double zoom_level) + +void +nautilus_zoom_control_set_zoom_level (NautilusZoomControl *zoom_control, double zoom_level) { - int icon_size = floor(zoom_level * NAUTILUS_ICON_SIZE_STANDARD + 0.5); - - if (icon_size <= NAUTILUS_ICON_SIZE_SMALLEST) { - return NAUTILUS_ZOOM_LEVEL_SMALLEST; - } else if (icon_size <= NAUTILUS_ICON_SIZE_SMALLER) { - return NAUTILUS_ZOOM_LEVEL_SMALLER; - } else if (icon_size <= NAUTILUS_ICON_SIZE_SMALL) { - return NAUTILUS_ZOOM_LEVEL_SMALL; - } else if (icon_size <= NAUTILUS_ICON_SIZE_STANDARD) { - return NAUTILUS_ZOOM_LEVEL_STANDARD; - } else if (icon_size <= NAUTILUS_ICON_SIZE_LARGE) { - return NAUTILUS_ZOOM_LEVEL_LARGE; - } else if (icon_size <= NAUTILUS_ICON_SIZE_LARGER) { - return NAUTILUS_ZOOM_LEVEL_LARGER; - } else { - return NAUTILUS_ZOOM_LEVEL_LARGEST; - } + zoom_control->zoom_level = zoom_level; + gtk_widget_queue_draw (GTK_WIDGET (zoom_control)); } -/* - * Changes the zoom controls setting to the nearest corresponding - */ void -nautilus_zoom_control_set_zoom_level (NautilusZoomControl *zoom_control, double zoom_level) +nautilus_zoom_control_set_min_zoom_level (NautilusZoomControl *zoom_control, double zoom_level) +{ + zoom_control->min_zoom_level = zoom_level; + gtk_widget_queue_draw (GTK_WIDGET (zoom_control)); +} + +void +nautilus_zoom_control_set_max_zoom_level (NautilusZoomControl *zoom_control, double zoom_level) +{ + zoom_control->max_zoom_level = zoom_level; + gtk_widget_queue_draw (GTK_WIDGET (zoom_control)); +} + +double +nautilus_zoom_control_get_zoom_level (NautilusZoomControl *zoom_control) { - set_zoom_level (zoom_control, nautilus_zoom_level_from_double(zoom_level)); + return zoom_control->zoom_level; } + +double +nautilus_zoom_control_get_min_zoom_level (NautilusZoomControl *zoom_control) +{ + return zoom_control->min_zoom_level; +} + +double +nautilus_zoom_control_get_max_zoom_level (NautilusZoomControl *zoom_control) +{ + return zoom_control->max_zoom_level; +} + + diff --git a/src/nautilus-zoom-control.h b/src/nautilus-zoom-control.h index 59cdd55c5..e4f33da60 100644 --- a/src/nautilus-zoom-control.h +++ b/src/nautilus-zoom-control.h @@ -45,10 +45,9 @@ typedef struct NautilusZoomControlClass NautilusZoomControlClass; struct NautilusZoomControl { GtkEventBox parent; - int current_zoom; - int min_zoom; - int max_zoom; - double zoom_factor; + double zoom_level; + double min_zoom_level; + double max_zoom_level; }; struct NautilusZoomControlClass { @@ -74,8 +73,6 @@ double nautilus_zoom_control_get_zoom_level (NautilusZoomControl *zoom_c double nautilus_zoom_control_get_min_zoom_level (NautilusZoomControl *zoom_control); double nautilus_zoom_control_get_max_zoom_level (NautilusZoomControl *zoom_control); -void nautilus_zoom_control_reset_zoom_level (NautilusZoomControl *zoom_control); - #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/src/nautilus-zoomable-frame-corba.c b/src/nautilus-zoomable-frame-corba.c index 1512d6187..167154b55 100644 --- a/src/nautilus-zoomable-frame-corba.c +++ b/src/nautilus-zoomable-frame-corba.c @@ -39,14 +39,21 @@ typedef struct { NautilusViewFrame *view; } impl_POA_Nautilus_ZoomableFrame; -static void impl_Nautilus_ZoomableFrame_zoom_level_changed (PortableServer_Servant servant, +static void impl_Nautilus_ZoomableFrame_report_zoom_level_changed (PortableServer_Servant servant, CORBA_double level, CORBA_Environment *ev); +static void impl_Nautilus_ZoomableFrame_report_zoom_parameters_changed (PortableServer_Servant servant, + CORBA_double level, + CORBA_double min, + CORBA_double max, + CORBA_Environment *ev); + POA_Nautilus_ZoomableFrame__epv impl_Nautilus_ZoomableFrame_epv = { NULL, - &impl_Nautilus_ZoomableFrame_zoom_level_changed, + impl_Nautilus_ZoomableFrame_report_zoom_level_changed, + impl_Nautilus_ZoomableFrame_report_zoom_parameters_changed, }; static PortableServer_ServantBase__epv base_epv; @@ -107,11 +114,22 @@ impl_Nautilus_ZoomableFrame__create (NautilusViewFrame *view, } static void -impl_Nautilus_ZoomableFrame_zoom_level_changed (PortableServer_Servant servant, - CORBA_double level, - CORBA_Environment *ev) +impl_Nautilus_ZoomableFrame_report_zoom_level_changed (PortableServer_Servant servant, + CORBA_double level, + CORBA_Environment *ev) { nautilus_view_frame_zoom_level_changed (((impl_POA_Nautilus_ZoomableFrame *) servant)->view, level); } + +static void +impl_Nautilus_ZoomableFrame_report_zoom_parameters_changed (PortableServer_Servant servant, + CORBA_double level, + CORBA_double min, + CORBA_double max, + CORBA_Environment *ev) +{ + nautilus_view_frame_zoom_parameters_changed + (((impl_POA_Nautilus_ZoomableFrame *) servant)->view, level, min, max); +} |