Commit Graph

36 Commits

Author SHA1 Message Date
ed2d1244da app: warning fix (MR !607).
This fixes the following warnings:

```
[2153/2321] Compiling C object app/widgets/libappwidgets.a.p/gimppanedbox.c.o
../app/widgets/gimppanedbox.c: In function ‘gimp_paned_box_dispose’:
../app/widgets/gimppanedbox.c:171:17: warning: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘long unsigned int’ [-Wsign-compare]
  171 |   for (i = 0; i < G_N_ELEMENTS (paned_box->p->dnd_highlights); i++)
      |                 ^
../app/widgets/gimppanedbox.c: In function ‘gimp_paned_box_drop_indicator_draw’:
../app/widgets/gimppanedbox.c:370:17: warning: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘long unsigned int’ [-Wsign-compare]
  370 |   for (i = 0; i < G_N_ELEMENTS (paned_box->p->dnd_highlights); i++)
      |                 ^
```
2022-03-30 18:05:25 +00:00
619cb91230 Remove unnecessary gimpmarshal.h and gimpwidgetsmarshal.h includes. 2021-08-13 18:01:13 +00:00
Ell
e38010b2d1 app: in GimpPanedBox, don't accept drag contexts with unsupported targets
... to avoid both highlighting the droppable areas during darg, and
crashing on drop.
2020-05-18 18:19:01 +03:00
Ell
6bae5d8cf7 Issue #4895 - Crash when dragging a dockable dialog
Apparently, the "drag-begin" signal of dockbook tabs can be raised
multiple times when a drag begins (this seems to happen randomly,
and rarely -- possibly a GTK bug).  In
gimp_paned_box_drag_callback(), which gets called in response, make
sure not to leak the corresponding idle source in this case, which
can lead to a segfault if the widget is destroyed before the idle
is run.
2020-04-03 20:05:13 +03:00
Ell
b8aba199a0 app, po: don't translate gimppanedbox.c
... it doesn't have any translatable strings anymore.
2020-02-03 00:55:42 +02:00
Ell
46079587e2 app: "You can drop dockable dialogs here" no more!
This commit removes the empty-dock-pane message, and instead
highlights all empty dockable drop-target areas once a drag
operation begins.

Add new gimp_dockbook_{add,remove}_callback() global functions,
which can be used to register a callback function to be called when
a dockable drag operation begins and ends.

Register such a callback in GimpPanedBox, and use it to highlight
all drop areas the widget handles.  Furthermore, when the widget is
contained in a GtkPaned, make sure that it has a minimal size for
the duration of the drag operation, so that the drop area is
visible even if the widget is normally hidden.
2020-02-03 00:02:49 +02:00
Ell
3b0040c043 app, libgimp*, modules: don't use g_type_class_add_private() ...
... and G_TYPE_INSTANCE_GET_PRIVATE()

g_type_class_add_private() and G_TYPE_INSTANCE_GET_PRIVATE() were
deprecated in GLib 2.58.  Instead, use
G_DEFINE_[ABSTRACT_]TYPE_WITH_PRIVATE(), and
G_ADD_PRIVATE[_DYNAMIC](), and the implictly-defined
foo_get_instance_private() functions, all of which are available in
the GLib versions we depend on.

This commit only covers types registered using one of the
G_DEFINE_FOO() macros (i.e., most types), but not types with a
custom registration function, of which we still have a few -- GLib
currently only provides a (non-deprecated) public API for adding a
private struct using the G_DEFINE_FOO() macros.

Note that this commit was 99% auto-generated (because I'm not
*that* crazy :), so if there are any style mismatches... we'll have
to live with them for now.
2018-09-18 14:39:56 -04:00
5f700549e7 Change the license URL from http://www.gnu.org/licenses/ to https:// 2018-07-11 23:29:46 +02:00
58d5cd2907 app: remove most of our own dockable DND code
and use GtkNotebook's implementation instead. This is mostly moving
dockable adding and removing code to GtkNotebook::page_added() and
::page_removed() and removing lots of code.
2018-06-08 01:37:19 +02:00
d9b97f2923 app: get rid of the dnd_window in GimpPanedBox
and draw a drop highlight like gimp_highlight_widget() does.
2018-05-23 19:47:24 +02:00
4e7eead7e3 app: set all GtkPaned widgets to have wide handles
the narrow handles' event areas did overlap with our own widgets close
to the handle.
2018-05-20 21:06:34 +02:00
1b3135ca95 Get rid of using GtkMisc API globally 2018-05-20 21:06:30 +02:00
5c6d52c5f3 app: port GimpPanedBox to GtkStyleContext 2018-05-20 21:06:27 +02:00
7fdb963e01 Bug 794996 - Misc. typo fixes in comments in app/
Found via `codespell -q 3 --skip="./po*"`
2018-04-08 21:25:56 +02:00
dcfe0b8925 app: fix uninitialized boolean in gimp_paned_box_drag_drop() 2015-02-24 23:29:39 +01:00
29456b96f9 Bug 744127 - Restore tab hover delay during drag-n-drops
Fix the return values of drag_motion() and drag_drop() callbacks.

Commit 7b85cf4de8 started mixing up
the two unrelated concepts

- the widgets has handled the event
- a drop here would do something / did something successfully

into one boolean value being both the function's return value and
a success indicator for the DND operation.

Untangle the concepts again by returning FALSE when
gimp_paned_box_will_handle_drag() returns TRUE (indicating that the
docking DND mechanism will kick in), and always returning TRUE
otherwise; and by using the state "drop was / would be successful"
only for calling gdk_drag_status() and gtk_drag_finish().

This way we make sure that:

- drag_leave() is called reliably again (because we return TRUE if no
  other widget will handle the event)
- drag data is freed reliably again (because we always call
  gtk_drag_finish())
2015-02-19 22:42:18 +01:00
fbfaa960e1 Bug 705797 - Empty right panel cannot be completely closed
Reduce the minimum width of the "You can drop foo here" label to one
pixel, so it can be hidden as completely as possible while keeping the
label visible.
2013-11-03 16:04:58 +01:00
74bc070147 Bug 635303 - Can't attach a dialog at the bottom of a minimized toolbox
Ensure a minimum size of the drop area and make sure it stays visible
at the bottom of a minimized toolbox. This wastes a few pixels at the
bottom of a toolbox that contains no dockables.
2012-10-07 19:49:33 +02:00
573faa39b0 Bug 669795 - Toolbox can't be shrinked to 1 or 2 columns
Reduce the requested width of the "You can drop foo here" label to 16
pixels, which makes is look a bit crappy, but at least the toolbox
becomes shrinkable to < 3 columns. Whoever keeps this empty space
around without using it shall henceforth be punished by having to see
that distorted and misplaced label.
2012-07-30 18:04:27 +02:00
867da8f293 app: add gimp_context_get_foreground,background_pixel()
which takes a Babl format to convert from/to.
Include <gegl.h> in a million places.
2012-05-02 17:50:41 +02:00
fbd746f95a app: don't rely on gtk_container_remove() to always destroy the child
Instead, either destroy the child instead of removing it, or remove
*and* destroy it in cases where the remove() api on the "parent"
doesn't match GTK+'s parent/child relation (like with all our dock
widgets). We can't rely on remove() to implicitly detstroy, because
there might be arbitrary other code holding references, such as
accessibility modules and whatnot. Most likely fixes unclear crashes
in accessibility code and other crashes we blamed GTK+ for.
2012-02-21 00:36:18 +01:00
42a5f8f834 Bug 666065 - "you can drop dockable dialog" of the toolbox
Set the height request of the "You can drop dockable dialogs here"
label to 0, so the toolbox can be properly resized to its minimum
again.
2011-12-16 09:40:54 +01:00
11239c4b17 app: don't use g_list_length() to check if a list is empty 2011-10-09 00:27:53 +02:00
2c175b068d libgimpwidgets: add gtk_paned_new() to gimp3migration.[ch]
and use it all over the place.
2011-10-02 14:36:42 +02:00
c0208e70c0 app: Resurrect "You can drop dockable dialogs here"
Resurrect the help string "You can drop dockable dialogs here" inside
GimpPanedBox. It got killed when we removed GimpDockSeparator.
2011-08-16 22:33:39 +02:00
1e013e774c app: some cleanup in gimp_paned_box_position_drop_indicator() 2010-12-18 23:28:20 +01:00
de3a5896f3 app: remove the children manually in dispose() for the reason below 2010-06-26 23:26:00 +02:00
b43be361ff app: add a forgotten g_object_unref()
so all dockables are destroyed when a dock is destroyed.
2010-06-23 22:50:45 +02:00
11b1300b6f app: Introduce gimp_dialog_factory_get_singleton()
Instead of including dialogs/dialogs.h everywhere, introduce
gimp_dialog_factory_get_singleton(). The dialog factory singleton is
still initialized by dialogs.c though.

Right now the assumption is that we never will have another dialog
factory instance around. There were so many problems before when we
had four of them, so let's just keep one of them around.
2010-02-28 23:23:24 +01:00
ba37aaa532 app: Support multi-column DnD in toolbox window
Add a drag handler to the toolbox so it's possible to create
multi-column docks in the toolbox dock window.
2010-01-22 20:48:34 +01:00
ef6bd20c3b app: When paned widget is removed, clear drag handler
When paned widget is removed, clear drag handler. Not clearing was a
copy and paste mistake.
2009-12-17 19:51:13 +01:00
7b85cf4de8 app: Use a GdkWindow instead of GimpDockSeparators for dockable DND
Make drag-and-drop rearrangement of dockables happen directly in the
existing widget hierarchy so we don't have to use special, ugly
widgets (read GimpDockSeparator:s) for that.

More specifically, make edges of dockables and dockbooks have the same
semantics as the GimpDockSeparators had. We put a highlight colored
GdkWindow on top of the widget in question to highlight these special
drop areas. This GdkWindow is not taken into consideration in the GTK+
drag-and-drop code, so it does not interupt the DND interaction.

To achive this, there is a problem we must solve: Drag events in GTK+
are propagated inwards and out, but we sometimes want ancenstor
widgets to take care of drop events. We solve this by introducing the
concept of "drag handlers". A drag handler is asked if it will handle
a given drag event, and if it will, a client will let the drag event
be propagated upwards in the widget hierarchy. Right now, the
GimpPanedBox is the only "drag handler". The code could be generalized
more but it doesn't feel worth it at this point.

The size of the special drop area is 5px, the same size as the default
GtkPaned handles. This is because the plan is to later use these
handles as drop areas too.

Other changes of interest are:
 * We need to take care of "drag-motion", "drag-drop" and widget
   highlightning ourselves. We can not use the GtkDestDefaults
   conveniences with gtk_drag_dest_set() any longer since we need more
   control.
 * Make the drop callback pass the insert index directly instead of a
   GimpDockSeparator
 * Add some GIMP_LOG() debug output for DND
 * Disable the GimpDockSeparator code in GimpToolbox
2009-11-29 18:22:12 +01:00
9ea1d490a4 app: Make gimp_paned_box_remove_widget() more destruction friendly
When closing a GimpDockWindow, the GtkBox code might already have
removed the widget. In that case we don't need to do anything.
2009-11-29 15:07:40 +01:00
4bd2230a55 app: Chain up GimpPanedBox::finalize() 2009-10-24 20:33:09 +02:00
b700f219de app: Make created GtkPaned subclass depend on GimpPanedBox orientation 2009-10-24 20:08:08 +02:00
eb9b365864 app: Add GimpPanedBox
Add a new class GimpPanedBox that wraps the arrangement of widgets
into GtkPaned hierarchies. It takes over the separator management from
GimpDock and the GtkPaned management from
gimpwidgets-utils.[ch]. GimpPanedBox can be both vertically and
horizontally oriented.

Change GimpDock to use this widget and make some other minor
adaptations.
2009-10-24 18:53:46 +02:00