Add a "pre-clicked" signal to GimpCellRendererViewable that can
prevent a selection from happening. Move the Alt-Click code in
GimpLayerTreeView to this signal and if a layer is Alt-Clicked, don't
go ahead and make the layer active. Also add a test for this use case.
Keep a list of GimpCellRendererViewable around and add API to add
them. When items are removed or the store is cleared, set the
renderers' "viewable" property to NULL so they don't keep refing the
viewable.
This is not really "model" code but needs to be done for all container
views that have viewable cell renderers.
GimpContainerComboBox and GimpContainerEntry lacked that clearing, so
this change might fix some cases where objects (even images) were
removed but still stuck in memory until the model changed again.
Implemented infrastructure for multiple selection support.
GimpContainerTreeView actually provides such functionality.
All other GimpContainerViews should work as before.
- gimp_container_tree_view_prepend_toggle_cell_renderer() to
gimp_container_tree_view_add_toggle_cell()
- gimp_container_tree_view_prepend_cell_renderer() to
gimp_container_tree_view_add_renderer_cell()
because "prepend" is an implementation detail, "renderer" is obsolete,
and in the second case it's not "cell renderer" but really a "renderer
cell".
If we didn't click on any cell, but on empty space in the expander
column of a row that has children, let GtkTreeView process the button
press to maybe handle a click on an expander.
* app/core/gimpimage.[ch]: rename all gimp_image_reposition_foo() to
gimp_image_reorder_foo() and added "new_parent" parameters. Factor
out calculating of the item's new container and index to a utility
function.
* app/core/core-enums.[ch]: rename the REPOSITION undos to REORDER.
* app/core/gimpimage-undo-push.[ch]
* app/core/gimpchannelpropundo.[ch]
* app/core/gimplayerpropundo.[ch]
* app/vectors/gimpvectorspropundo.[ch]: change accordingly. Remember
the old parent item in all item reorder undos.
* app/widgets/gimpitemtreeview.h: change GimpReorderItemFunc prototype
accordingly.
* app/widgets/gimpchanneltreeview.c
* app/widgets/gimplayertreeview.c
* app/widgets/gimpvectorstreeview.c (class_init): follow image API
name changes.
* app/widgets/gimpitemtreeview.c (gimp_item_tree_view_drop_viewable):
implement reordering of items between groups.
* app/widgets/gimpcontainertreeview.c
(gimp_container_tree_view_reorder_item): fix to reorder the item
within its level of the tree (unrelated to above changes, but needed
to make them work).
* app/widgets/gimpcontainerview.[ch]: add and remove container trees
recursively. Change virtual function ::add_item() to pass the
insert_data of the parent viewable.
* app/widgets/gimpcontainercombobox.c
* app/widgets/gimpcontainerentry.c
* app/widgets/gimpcontainergridview.c: changed accordingly.
* app/widgets/gimpcontainertreeview.c
* app/widgets/gimpitemtreeview.c
* app/widgets/gimplayertreeview.c: dito, but actually use the passed
parent_insert_data to insert the item at the right place in the
GtkTreeView.
Don't waste the expander space in all GimpContainerTreeViews. We can
later set it to TRUE in individual subclasses which actually display a
tree and not only a list.
Use gtk_tree_view_get_cell_area() instead of
gtk_tree_view_get_background_area() because the latter includes things
like expanders, indentation and padding and messes up the x coordinate
of our naive click detection.
Check for SHIFT, CONTROL and MOD1 explicitely so the code doesn't prevent
item activation for esoteric modifiers that are set by whatever X
component (like XKB).
Only activate container tree view items when no modifier keys are
pressed so that for example the layer properties dialog is not shown
when quickly toggling a layer mask with Ctrl + Click.
2009-01-17 Michael Natterer <mitch@gimp.org>
* all files with a GPL header and all COPYING files:
Change licence to GPLv3 (and to LGPLv3 for libgimp).
Cleaned up some copyright headers and regenerated the parsers in
the ImageMap plugin.
svn path=/trunk/; revision=27913
* app/widgets/gimpcontainertreeview.[ch]
* app/widgets/gimpcontainertreeview-private.h: Make the
renderer_cells and toggle_cells members private.
(gimp_container_tree_view_set_main_column_title)
(gimp_container_tree_view_prepend_toggle_cell_renderer)
(gimp_container_tree_view_prepend_cell_renderer): New interface.
* app/widgets/gimptoolview.c
* app/widgets/gimpitemtreeview.c
* app/widgets/gimplayertreeview.c
* app/widgets/gimpcontrollerlist.c: Use new interface.
svn path=/trunk/; revision=27675
* app/widgets/gimpcontainertreeview.[ch]: Move container tree view
model column enums here and call the last enum _N_COLUMNS.
* app/widgets/widgets-enums.h: Remove the enum. It was meant only
for the container tree view class hierarchy anyway.
svn path=/trunk/; revision=27672
* app/widgets/gimpcontainertreeview.[ch]
(gimp_container_tree_view_set_dnd_drop_to_empty): New setter
function so that we can make the "gboolean dnd_drop_to_empty"
class instance member private.
* app/widgets/gimpcontainertreeview-private.h: Move member here.
* app/widgets/gimpcontainertreeview-dnd.c: Go through priv pointer.
* app/widgets/gimpitemtreeview.c (gimp_item_tree_view_init): Use
the new function.
svn path=/trunk/; revision=27671
* app/widgets/widgets-enums.h: Put the GimpContainerTreeView enums
here instead of exposing them through silly class instance
members.
* app/widgets/gimpcontainertreeview.c:
* app/widgets/gimpcontainertreeview-dnd.c
* app/widgets/gimpdatafactoryview.c
* app/widgets/gimpitemtreeview.c
* app/widgets/gimplayertreeview.c
* app/widgets/gimpsettingseditor.c
* app/widgets/gimptemplateview.c
* app/widgets/gimptoolview.c: Clean up and use new enum names.
svn path=/trunk/; revision=27666
* app/widgets/gimpcontainertreeview.[ch]: Don't expose class
instance struct members that is currently only used within the
GimpContainerTreeView implementation.
* app/widgets/gimpcontainertreeview-private.h: New file containing
the definition of the private struct.
* app/widgets/gimpcontainertreeview-dnd.c: Change accordingly.
* app/widgets/Makefile.am: Add new file.
svn path=/trunk/; revision=27662
2008-09-05 Michael Natterer <mitch@gimp.org>
Bug 545325 – Scrollbars do not disappear automatically
* app/widgets/gimpcontainertreeview.c: autosize the columns after
each operation that can reduce the treeview's width.
svn path=/trunk/; revision=26875
2008-06-28 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcontainertreeview.[ch]: add new function
gimp_container_tree_view_connect_name_edited() which makes the
name cell editable and connects a passed "edited" callback.
* app/widgets/gimpdatafactoryview.c
* app/widgets/gimpitemtreeview.c
* app/widgets/gimpsettingseditor.c
* app/widgets/gimptemplateview.c: use it instead of having the
same code four times.
svn path=/trunk/; revision=26009
2008-03-30 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcontainertreeview.c: added a finalizer that
frees
the memory allocated for the cell lists.
svn path=/trunk/; revision=25316
2007-11-09 Michael Natterer <mitch@gimp.org>
* libgimpwidgets/gimphelpui.[ch]: use the new tooltip API instead
of the old deprecated one. Removed _gimp_help_init(). Remember
whether tooltips are enabled or not in a local variable that can
only be altered at startup time and not after. The API now expects
markup instead of plain text which might cause warnings and
perhaps needs to be changed.
* libgimpwidgets/gimpwidgets-private.c: don't call _gimp_help_init().
* app/config/gimpguiconfig.c: made show-tooltips a
GIMP_CONFIG_PARAM_RESTART property.
* app/widgets/gimptoolbox-color-area.c: don't add the tooltip here...
* app/widgets/gimptoolbox.c: ...but here (as for all other
indicators). Also escape '&' properly because we now use markup.
* app/tools/gimpselectionoptions.c
* app/widgets/gimpeditor.c
* app/widgets/gimpwidgets-utils.c: print modifiers and
shortcuts in bold instead of in ().
* app/widgets/gimpcontainertreeview.c: show tooltips on rows if
gimp_viewable_get_description() returns a tip.
* app/dialogs/preferences-dialog.c
* plug-ins/jpeg/jpeg-save.c
* plug-ins/MapObject/mapobject_ui.c
* plug-ins/Lighting/lighting_ui.c
* plug-ins/common/animationplay.c
* plug-ins/common/warp.c: no need to add event boxes just to have
tooltips, the new ones work on all widgets.
svn path=/trunk/; revision=24093