Make GimpToolbox and GimpToolPalette use the GimpUIManager and
GimpDialogFactory of the top container instead of holding references
on their own. If they hold references on their own, we need to update
these when we move e.g. GimpToolbox between different top level
containers such as GimpDockWindow and GimpImageWindow. Failure to do
this cased problems talked about in bug 646794 (case 2).
This is a quick fix because the call can block and needs to be ported
to the async API. I simply disabled the entire block that gets the
icon from GIO.
In single-window mode, gimp_session_managed_set_aux_info() will set
the size of the dock areas at the sides. If we don't wait for those
areas to get their size-allocation, we can't properly restore the
docks inside them, so do that in an idle callback.
Also add a required call to gimp_test_run_mainloop_until_idle()
because of this in the 'automatic_tab_style' test.
Rememeber if image windows are opened because we want the
gimp_session_info_restore() code to run for the single-image window
once that code is in place.
When we get to gimp_dialog_factory_dialog_configure() and do
gimp_session_info_read_geometry(), the window geometry has not yet
been updated, i.e. gimp_session_info_read_geometry() gives the session
info the size of the *previous* configure event.
Solve this by giving gimp_session_info_read_geometry() the configure
event so it can use that size when availble.
If we don't do this change, then we get bogus values of the size of
image window when repeatedly switching between single- and
multi-window mode.
In gimp_session_info_restore() there is code to create a dialog from a
session info. GimpSessionInfo lives in the widgets module. Thus we
can't add restoration code that depends on a higher level module. In
particular, we can't add code to restore docks in an GimpImageWindow
since GimpImageWindow lives in the display module. And we need such
code to be able to restore a single-window mode session.
Since dialogs are defined in the dialogs module, it makes sense to
also have the code that restores a dialog in that module.
So, add a 'restore_func' member to GimpRestoreDialogFunc of type
GimpRestoreDialogFunc and move the code there.
Add GimpDockContainer::get_dock_side() and write that info in the
sessionrc file. In single-window mode, a dock can be either on the
left or right side of the image window. In a dock window however, the
side concept doesn't apply ('side' has nothing to do with what column
a dock is in in a GimpDockColumns)
Add image_window boolean to GimpDialogFactoryEntry and rename
FOREIGN_NOT_HIDEABLE() to IMAGE_WINDOW(). We need to treat image
windows a bit special when we restore a single-window mode session.
Make GimpDockContainer::get_docks() return a new list and not just a
pointer to a list so that GimpImageWindow can implement it (who needs
to merge its two GimpDockColumns lists).
Don't set the first page of the restored dockbook active if there are
less than two pages. Also add a comment that explains why we return
the dockbook even though we know that all its dockables failed to
restore.
Make GimpDockWindow implement the GimpDockContainer interface. The
plan is to make GimpImageWindow also implement the GimpDockContainer
interface when we start to session manage docks in single-window mode.
We now have to classes that contain docks, GimpDockWindow and
GimpImageWindow (in single-window mode). Introduce a GimpDockContainer
interface so we can cope with these in an abstract way.
Rename GimpSessionInfoDock::identifier to dock_type, because it isn't
really an identifier; there might be several instance with dock_type
being "gimp-dock". This is a preparation for adding an actual
'identifier' member.
which allows to restrict the scale to a range that is smaller than
that of the model GtkAdjustment. This way we can enter large values in
the entry or by dragging beyond the end of the scale, but keep a
reasonably usable scale range for "normal" values.
and completely separate configure and sanity checks for gdk-pixbuf
from GTK+, because it's now distributed as a separate package. Remove
all sorts of conditional compiling based on GDK_CHECK_VERSION() and
CAIRO_VERSION.
Window managers are such a crap. So on top of all friendly hinting and
geometry setting, simply use gtk_window_move() whenever a session
managed GtkDialog is shown. It should be very hard to ignore that, but
of course the WM has the last word no matter how hard we try.
Note: this code should be more complex and the signal connection
should happen in GimpDialogFactory. Left it in GimpSessionInfo for now
until it got a bit of testing.
It made the transform code hard to read and never belonged into the
tile manager anyway. It's a simple pixel buffer that should not know
about any position in an image. Instead, pass around the offsets of
tile managers explicitly, so everything is less obscure for the price
of having more parameters. This will also help replacing TileManagers
with GeglBuffers.
Instead, keep around a GimpFilteredContainer in GimpToolInfo that
maintains a per-tool list of presets from the global preset factory.
Turn the tool options dialog's preset Save/Restore/Edit/Delete menus
and buttons into shortcuts for managing the active tool's presets.
which is a copy of GimpFilteredContainer with s/Filtered/Tagged/ and
no other change. #if 0 GimpFilteredContainer for now and use
GimpTaggedContainer instead all over the place.
If the cursor position (or the current selection), doesn't contain any
font, font-size or color tags, display the default values from the
GimpText object instead of "nothing". Still display nothing if the
selection contains different fonts, sizes or colors.
instead of gimp_container_get_neighbor_of_active() in gimp-utils.c.
Move the additional GimpContext logic of the old function into the
callers, but use the new function in more places.
Instead, use an event box and set its state to SELECTED when the
device is active. Also cleaned up spacings and general appearance a
bit. Still a mess.
- change gimp_devices_get_list() to gimp_devices_get_manager()
- remove gimp_devices_get_current()
- let GimpDeviceStatus connect to the manager's "notify::current-device"
directly and remove device status updating code from gui.c
- cleanup in gimpdevices.c
Add a GimpDeviceManager object and take over most code from
gimpdevices.c, but leave all functions in gimpdevices.c there as
wrappers in order to make rebasing in gtk3-port simpler.
and redo how the curves tool sets its curves in order to support this
without code duplication. Also change the color of the yellow curve in
the dynamics output editor to orange because yellow is hardly visible.
Update the toggles in the treeview only if a boolean property of the
output changes, and not on *each* output change which includes each
tiny curve editing.
Also fix formatting in the whole file.
Properly distinguish between dropping after a group and into it, by
having three drop areas on a collapsed row. Still handle expanded rows
as before, but indicate dropping into visually just as on a collapsed
row.
when dealing with native window handles. Also get rid of using
GdkNativeWindow and simply consistently use guint32 all over the
place. This is more obvious and consistent and keeps the diff to the
gtk3-port branch smaller.
- return TRUE from event handlers if we handled the event
- remove the "instant update" toggle and feature
- move the color area left of the labels now that the toggle is gone
which is supposed to set up a widget for tablet events and make sure
the context changes on device changes. "supposed" because everything
is currently horribly broken on GTK+ 2.x. Use the function for all
affected widgets except for the canvas.
Move the call to gimp_dnd_uri_list_dest_add() to the end of the DND
setup code because it adds text/plain for legacy URI DND support,
which is way too generic to be handled first.
- TYPE_SQUARE is also named SQUARE and not RECTANGLE
- serialization doesn't suffer from the changed name because it's the
default value that never gets serialized
- a lot of messy code in the ink options can be replaced by a one-liner
because the enum names now match their resp. stock items
by integrating their label instead of requiring one externally. This
way we get rid of some more labels in the tool options. Also clean up
tool options further (add more spin scales, and some general
reordering and spacing cleanup).
Instead, inherit from GtkBox directly and set the orientation in
init(). Replace more gtk_container_add() by gtk_box_pack_start() in
the reparented classes.
Remove a crack eventbox and a double crack alignment and suddenly the
widget behaves properly. I have no idea what "important" feature I
killed with that removal, but the whole palette editing code needs
some serious chopping soon.
Instead, handle the drawing offset generically by offsetting the
cairo_t in two places in the callers, and only pass the width and
height available for drawing.
Move the g_signal_emit() to the end, because the cell->renderer could
be changed and cause a segfault. Also check cell->renderer before
dereferencing it.
Change the generated tag names to use #rrggbb notation and compare the
colors on an 8 bit basis to make sure the comparison and the tag names
exist in the same set of values (otherwise the text buffer gets into
an inconsistent state that can even lead to crashes).
Introduce gimp_vectors_get_bezier() which creates the bezier
representation on demand and then caches it for subsequent calls
until the vectors object is frozen.
At some point we should introduce GimpVectors::changed instead
of relying on the fact that a vectors object is always frozen
and thawn whenever it is changed...
At the same time, get rid of bitmap cursors alltogether. Instead
(because it looks ugly to have GDK convert RGBA cursors into bitmaps
for old X servers), add the bitmaps as proper PNGs and simply use them
as RGBA cursors.
Remove "Text to Selection" actions. They were added to make the
feature more discoverable. But we should make the original "Alpha to
selection" feature more discoverable, not treating text layers in a
special way where it's not needed.
by letting the histogram view always draw the background and the outer
borders. Also fix a lot of off-by-one problems in the curve view which
occur due to the 0.5,0.5 offset of cairo line drawing.
Call cairo_surface_flush() before reading or writing a surface's
pixels directly, and use cairo_surface_mark_dirty() after writing
pixels directly, so we don't read old pixels, and our written pixels
get actually used.
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.
Don't use an action based implementation of Alt-Click for "Layer to
selection" since the actions will always use the active drawable,
preventing us from solving bug 589010. Use the tree model and
gimp_channel_select_alpha() instead.
using the proper API, so all stuff is properly disconnected and the
list items managing them are freed to. Also make removing robust
against dockbook->dock being NULL.
This is evil: the hash table of "insert_data" is created on demand
when GimpContainerView API is used, using a value_free_func that is
set in the interface_init functions of its implementors. Therefore, no
GimpContainerView API must be called from any init() function, because
the interface_init() function of a subclass that sets the right
value_free_func might not have been called yet, leaving the
insert_data hash table without memory management.
Call GimpContainerView API from GObject::constructed() instead, which
runs after everything is set up correctly.
Don't divide by zero in gimp_session_info_class_apply_position_accuracy()
when klass->position_accuracy is 0, which happens on each exit in a normal
session.
Introduce a few pixels of error margin in sessionrc, otherwise the
tests are too fragile, widgets have a tendency to change size a bit
and window managers have a tendency to move windows a bit.
Still needs more work, should probably do the same on book positions
too...
We don't need to call gimp_dockbook_refresh_tab_layout_lut() in
added() and removed() because we call
gimp_dockbook_update_auto_tab_style() in add() and remove().
instead of never drawing a background. Doesn't make any difference,
but makes GimpOverlayBox a more general container. Also, the offscreen
GdkWindow doesn't need any event but GDK_EXPOSURE_MASK.
* app/widgets/gimpoverlaychild.c: when creating offscreen windows, try
to set an RGBA colormap on the offscreen window's widget and use the
RGBA colormap to create the window. This has to be done here,
because it's not possible to get to the right screen *inside* the
offscreen widget before it's parented, and we need that screen
before the widget is realized, and the widget can't be parented
before it's realized or it will get the wrong parent window.
Everything clear now?
* app/widgets/gimpoverlayframe.c: draw the round corners only if the
screen has an RGBA colormap.
Remove the dockable drag handle and move the menu button it hosts up
to the GimpDockbook, with the gtk_notebook_set_action_widget() API.
This frees up quite a lot of screen estate which can be used for the
content of dockables instead.
Add support for a new type of Tab Style called 'Automatic'. This tab
style makes the GimpDockbook use the biggest actual tab style it can
for its auto tab style dockables, based on its widget allocation.
The tab style candidates for auto tab style are "Status + Blurb",
"Status + Text" and "Status". A docked widget can also say that it
wants to use "Icon" instead of "Status" for its auto tab style. The
'Tool Options' dockable does this. This is to be as backwards
compatible with the old tab style setup, we make 'automatic' the
default everywhere.
We have quite a bit of dependency to internal layout code in
GtkNotebook, but the current code should be pixel perfect and rather
complete.
Also add a basic regression test.
In order to get accurate measurements of widgets that will be put in a
GimpDock, add gimp_dock_temp_add() and gimp_dock_temp_remove(). That
way we can add a widget temporarliy, measure it with the
GimpDock::font-scale property applied, then remove it when we're
done. We can't apply style properties on widget detached from a
GdkScreen hierarchy :(
This is supposed to finally replace GimpContainerGridView along with
GtkWrapBox. The code is experimental and currently even crashes
without a modified GTK+, so it's disabled. Keeping it in GIT makes
developing easier though.
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.
We need to be able to pass a GimpUIManager to
gimp_dialog_factory_dialog_new(), so make that possible. Also make
sure to set ui_manager in gimp_dialog_factory_dialog_new_internal()
when we create both a dock window and a dock, so tooltips works in
toolboxes created from scratch.
- app/widgets/gimptextstyleeditor.c: don't block all key events so
they can reach the canvas.
- app/display/gimpdisplayshell-callbacks.c: instead, ignore canvas key
events when the canvas has no focus.
This fixes navigating out of the text style editor with TAB, moving
focus to the canvas. I have no clue why navigating *between* the
widgets in the style editor doesn't work.
I had to remove the asserrt in tool preset constructor, because with it
it wasnt possible to initalize an empty model object for the editor.
At init time the gimp object passed to the constructor is not yet available.
The function gimp_dockable_get_tab_widget() and
gimp_dockable_get_drag_widget are not getters, they create new
widgets. Furthermore, gimp_dockable_get_tab_widget() doesn't use the
instance tab style but takes a tab style paramter. Rename the
functions to gimp_dockable_new_tab_widget_for_style() and
gimp_dockable_new_drag_widget() to reflect this.
and also #define the names of the properties we (ab)use, so we don't
have to use magic strings all over the place, and we don't have to use
g_object_get() either.
Refactor stuff a bit so that the dock window description can be both
short and long. The short version only have the active dockables, and
the long version have all the dockables in the description string. We
use the short version for the window title and the long version for
the Recently Closed Docks menu items.
Introduce GIMP_DIALOG_VISIBILITY_HIDDEN because it is a bit
counter-intuitive to call gtk_widget_hide() on a dialog and then set
GIMP_DIALOG_VISIBILITY_VISIBLE on it. No change in program flow has
been (deliberately) introduced.
Tag assignment has been redesigned according to Peter Sikking's
recommendations. When multiple resources are selected, common tags
to all of them are listed in tag asignment widget. On assignment
it is detected which tags were added and removed from common tag set
and the selected resources are updated accordingly (instead of
replacing their previous tags).
Implemented infrastructure for multiple selection support.
GimpContainerTreeView actually provides such functionality.
All other GimpContainerViews should work as before.
Only remove a dock in the book-removed callback to dock columns if the
dock has the dock column as parent. It won't during destruction for
example. This fixes the test case
/gimp-ui/restore-recently-closed-multi-column-dock.
Add a helper function gimp_dock_window_should_add_to_recent() which
properly handles the toolbox with regards to what dock windows that
should be added to the list of recently closed docks.
Since the order of docks in a dock window is arbitrary, it can never
be correct to only care about the first dock. Remove
gimp_dock_window_get_dock() and correct that code that made use of
it. (The function itself was introduced when there could only be one
dock per dock window.)
Move toolbox special casing into
gimp_dialog_factory_dialog_new_internal() and on the fly fix problems
with double toolboxes appearing and sometimes not appearing.
- in GimpText, make "text" and "markup" mutually exclusive, so that
whenever one is set to non-NULL, the other is cleared automatically.
- add gimp_text_buffer_has_markup() which returns TRUE if any char
in the buffer is tagged.
- in the text tool, only set "markup" on the text proxy if there is
actually markup in the buffer, and set "text" otherwise.
This way we don't push "text" *and* "markup" undos on each keystroke,
and undo compression works the way it did before.
In the drop callbacks, don't check if the GimpContainerView's container
contains the dropped item, it might be in a sub-container. Instead,
simply checking if the GimpContainerView knows the item is sufficient
(and also much simpler than a recursive container serach).
Instead, keep a list of tags to explicitely remove around (the list of
unchecked toggles), and remove only these tags, so the tags that have
no widget in the UI are not affected by the insert_tags logic.
Add gimp_text_buffer_get_iter_at_index() which does the reverse thing
than the already existing function gimp_text_buffer_get_iter_index().
Use the new function when cursor-navigation lines. Add "gboolean
layout_index" to both functions, which if TRUE indicates that the
passed in/out index is an index into the PangoLayout's content rather
than the text buffer's. When dealing with layout indices, take into
account the additional characters we insert into the serialized markup
(and thus the layout) for each character that is tagged with spacing.
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.
because it breaks the invariant that the pango layout used for
navigating in the on-canvas editor must be a 1:1 view on the text
buffer used for editing. Will have to fix that somehow...
We only have one dialog factory now, and
gimp_dialog_factory_from_name() doesn't provide compile-time type
safety, so use global_dialog_factory directly instead.
The copy doesn't do anything yet, but this will enable us to do
transformations on the buffer contents before turning them into
markup, and the other way around.
because we will soon use temporary buffers to turn stuff into markup
and back, and these temporary buffers won't have their tags registered
like the original GimpTextBuffer does.
Use gtk_text_buffer_begin_user_action() and end_user_action() to group
all text buffer operations triggered by a single editing operation.
Connect to the buffer's "end-user-action" signal instead of to
"changed", "apply-tag" and "remove-tag" separately, so we only update
the text proxy once per user editing.
Add a list of available baseline tags to GimpTextBuffer and
automatically create baseline tags as needed. They get serialized as
<span rise="value">, so add attribute and value parameters to the
buffer's tag_to_name() and name_to_tag() functions. Properly managing
the rise's amount is a TODO, currently each keystroke changes the
baseline by 1024 pango units, which might be whatever depending on the
output grid.
instead of using the toggles only to change the style of selected text.
Introduces a list of "insert tags" in GimpTextBuffer that is applied
on newly inserted text if it exists. Clear the list on each content
or cursor/selection change, so we always display wthe style at the
cursor unless the buttons were clicked explicitely.
When turning overlapping tags into a strictly nested markup structure,
make sure we don't treat tags that are ending at an iter like tags
that were only closed because overlapping spans don't exist in markup.
Chew on this sentence a bit, it took ages to write it.
- keep around tags for styles in GimpTextBuffer. For now only bold,
italic, underline and strikethrough.
- add GimpTextStyleEditor, a widget which allows setting tags on
a GimpTextBuffer's selection.
- add serialize/deserialize code to/from pango markup using
GtkTextBuffer's rich text (de)serialization infrastructure.
Doesn't produce or handle <span> yet.
Pull all text buffer utility functions as methods and use
GimpTextBuffer all over the place instead of GtkTextBuffer.
Some actually usefuly features coming soon...
and get rid of the brainfuck idea that app/ has to use _gimp_unit_foo()
functions, passing a gimp pointer. Instead, simply use the libgimpbase
API all over the place. Should we ever allow more than one gimp instance,
they will simply have to share one unit database.
Add Windows→Hide docks menu item. We don't remove the hardcoding of
having Tab trigger it though, because gtk_accelerator_valid() returns
FALSE for GDK_tab. This means that if the user changes keyboard
shortcut for the menu item, both the user shortcut and the hardcoded
shortcut will work. We remove gimp_dialog_factories_toggle() and make
clients activate the action instead to toggle dock visibility.
Make sure that after we have set GTK_WIN_POS_MOUSE on a dialog created
with the dialog factory, it is eventually reset. Also remove the only
occurance of the DEBUG_FACTORY define.
and change the dialog from a editor of the display's devices to an
editor of all devices of all displays known to GIMP, regardless
whether currently plugged or just remembered in devicerc. will need to
distinguish them in the next step...
Add functions that are similar to the "device-added" and
"device-removed" of GdkDeviceManager in the XI2 branch. Add "device"
and "display" properties to GimpDeviceInfp and distunguish between
creating device info objects from scratch for never-seen devices, and
setting a GdkDevice on them when a previously known device gets
plugged in.
Added two new widgets, GimpDeviceInfoEditor, which is an editor/view
widget for GimpDeviceInfo, and GimpDeviceEditor, which is an editor
widget for all devices. Both are pretty much ugly right now and look a
lot like the old GtkInputDialog, but are at least internally cleaned
up and easily changable code and ui wise. Consider this a completely
intermediate state.
Also cleaned up GimpDeviceInfo so it's possible to have a proper
view on it, and did the needed changes to the preferences dialog
to use the new stuff.
Add gimp_image_new_from_drawable(), from_component() and from_pixbuf()
and remove that duplicated code from gimptoolbox-dnd.c and
gimpdisplayshell-dnd.c
because they are "new" only once and then never again. Instead, simply
call new stuff "Layer", "Channel" and "Path", either by passing that
string explicitely, or by passing NULL so their class' default name
will be used.
'Pixel dimensions' can be misinterpreted with the size of a pixel, so
use 'size in pixels' instead. This is consistent with e.g. the Image
Scale dialog which talks about 'image size'.
In order to make a clear separation between the core modules and the
UI modules, move the necessary enums from display-enums.h and
widgets-enums.h to config-enums.h and the files
gimpdisplayoptions.[ch] from the display to the config module. This
removes the config -> display dependency.
This change has three main benefits
* It lets us remove includes of display files from the config module
* We don't have to link gimp-console and test-config with a subset of
object files from the display module
* It is reflected in devel-docs/gimp-module-dependencies.svg that the
application is made up of core modules and UI modules and that no
core module depends on any UI module
Session files from GIMP 2.6 don't need to have docks in the toolbox
top-level. Don't crash on that, instead add a "gimp-toolbox" dock
during sessionrc parsing.
Get rid of 'global_toolbox_factory' and manage everything dock-related
with 'global_dock_factory'. The whole of 'global_toolbox_factory' was
a big special-case and getting rid of it makes it easier to extend the
session management with e.g. single-window mode dock functionality.
To get rid of 'global_toolbox_factory' we, roughly, have to
* Replace 'global_toolbox_factory' with 'global_dock_factory'
everywhere. We can also get rid of lots of code that did special
things for the "toolbox" factory.
* Make the use or interaction with the toolbox explicit in some
places. For example, a function gimp_dock_window_has_toolbox() has
been introduced.
* Make GimpSessionInfoDock have an 'identifier' parameter so we can
differentiate between the "gimp-dock" and "gimp-toolbox" dock
types.
Rename back global_dock_window_factory to
global_dock_factory. Renaming to global_dock_window_factory was done
under the assumption that there would be a separate factory that would
create non-toplevel dockables, but I don't expect this to happen in
the forseeable future.
Let dock windows have proper GimpDialogFactory entries. This allows us
to get rid of a lot of ugly mostly duplicated code. This also makes us
ready the merge the dock window and toolbox factories which will soon
be done. A few things should be noted:
* We adjust the wrap box aspect ratio in the toolbox to avoid having
the toolbox dock window explode
* We make sure that we still can handle sessionrc files from GIMP 2.6
and older
Instead of having one dock constructor per dialog factory, put entries
for the normal dock and the toolbox dock in the dock window
factory. To do this we also need to merge the dock and normal dialog
constructors into one function protptype.
This takes us one step closer to be able to merge the
global_dock_window_factory and the global_toolbox_factory into one.
The long term goal: Support multi-column dock windows with one of the
docks being the toolbox. In this situation we can't have the toolbox
dock created by a separate dialog factory, that is too messy.
Instead of having gimp_dialog_factory_set_put_in_dockables() with all
the cruft that leads to we can use the 'dockable' member on
GimpDialogFactoryEntry. This is a general strategy that the code base
is being moved in: try to keep information per-entry rather than
per-factory.
Change gimp_dialog_factory_set_constructor() to
gimp_dialog_factory_set_put_in_dockables() order to narrow the
interface a bit. We can make both
gimp_dialog_factory_set_put_in_dockables() and the
GimpDialogConstructor typedef internal this way.
The main reason we do this is because we want to get rid of a
dependency on factory->p->new_dock_func. Eventually we want to
construct docks just like we construct other widgets in the factory,
so new_dock_func will be removed.
Also improve readability of code such as making it explicit that
gimp_dialog_factory_put_in_dockable_constructor() is just an extended
version of gimp_dialog_factory_default_constructor().
In order to let tests run against the source dir, allow them to
override the menus directory. Add utility functions for this and
adjust gimpuimanager.c accordingly.
Add "dialog-factory", "ui-manager" properties to GimpDockColumns and
let GimpDock look for these before trying to look for a dock window
which does not exist in single-window mode.
Add and use gimp_dock_columns_new() and add a GimpContext property to
GimpDockColumns. Also move the widget construction from _init() to
_constructor() in GimpDockWindow so we have a context object to pass
to gimp_dock_columns_new().
When moving dockables from a dock window to an image window, they need
to start listening to the user context. So update the dockables with
the new context when we switch window mode.
Don't fail when checking for availability of buffers in
gimp_view_render_to_surface(). The buffers will be gone when quitting
GIMP while in s-w-m and we don't want to print a warning every time
that happens.
Derive GimpTranslationStore from GimpLanguageStore. It lists the
installed GIMP translations. Also sort the list alphabetically
instead of relying on the XML file being sorted.
When quitting GIMP while in single-window mode and the widget
hierarchies are cleaned up, prevent a tab widget from being
constructed so we don't get any annoying warnings due to failing to
look up a context.
In order to make a GimpDock get hold of a GimpContext both in
single-window mode and in multi-window mode, don't make it look for a
GimpContext in a GimpDockWindow, put the context in GimpDockColumns
instead. GimpDockColumns exists both in s-w-m and m-w-m, contrary to
GimpDockWindow. Still use the GimpDockWindow as a backup though.
Use g_signal_connect_object() instead of g_signal_connect() so that
the dockable is referenced and not destroyed before
_drag_end(). Prevents a crash, but DnD in single-window mode does not
work properly yet.
In preparation for cleaning up the dialog factory stuff, start making
dockable constructable with just g_object_new(). First out is
gimp_tool_options_editor_new(). Move code from that function into
gimp_tool_options_editor_constructor() and add the necessary "gimp"
GObject property. The regression test
"/gimp-ui/tool-options-editor-updates" still passes after the
refactoring, of course.
Add and use GimpDialogFactoryPrivate for the members that are not used
by clients. Remove initialiation in _init() for member put in the
private struct, the struct is zeroed for us.
Spacing is now dynamically controllable. Unlike other parameters it
made little sense to scale down from default spacing so it scales between
current and maximum spacing.
Don't crash when detaching dockables from the image window. This
scenario only occurs in single-window mode. We solve it by using
global variables and checking for NULL for src_dock_window; there is
no dock window when detaching from the image window.
The use of global variables is meant to be temporary.
Introduce GimpSessionInfoDock and session manage multi-column dock
windows. We are still backwards compatible with sessionrc, the only
difference is that a "session-info" entry now can have multiple "dock"
entries.
Also make ond dock window multi-column in the regression test
app/tests/test-session-management.c and adjust positions and image
selection menus a bit.
Add GimpMenuFactoryPrivate. Note that we don't introduce a Gimp-getter
since the menu factory is globally accesible and we want to have as
much control as possible in who can get the Gimp instance.
Move the Image Selection Menu from GimpMenuDock to
GimpDockWindow. That is, if a dock window contains many docks then
they will share the same Image Selection Menu.
To do this we need to move around quite a bit of code. Move the
"context", "dialog-factory" and "ui-manager" properties from GimpDock
to GimpToolbox, GimpMenuDock doesn't need it any longer. Turn the
GimpDock getters for these properties into wrappers that go to the
GimpDockWindow properties. In some places, most notably GimpToolbox
construction, we use the GimpToolbox values of these properties, but
most of the time it works fine to just use the GimpDockWindow
properties. GimpDock::setup() and set/get_aux_info() have also been
moved to GimpDockWindow since the only aux info for docks was for the
image selection menu.
Also, we don't bother porting gimp_menu_dock_destroy() to
GimpDockWindow, but we leave the code around. If this is a problem, it
will show.
The private instance data struct is zeroed out for us so we don't need
to assign NULL, FALSE and 0 to private instance data members in
gimp_dock_window_init().
To make the smaller font in docks also apply in single-window mode,
move the GimpDockWindow::font-scale style property to GimpDock. We use
the GimpDockWindow approach, so now each GimpDock has a name of the
form "gimp-internal-dock-<id>". We add "internal" to avoid clashing
with the GimpDockWindow legacy id "gimp-dock-<id>".
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
Make GimpDockColumns listen to "dock-removed", not "dockbook-removed",
when trying to figure out when to destroy itself. Fixes some crashes
when rearranging the UI, for example when doing this step-by-step:
1. Have two dock windows with one dockable each, say A and B
2. Move A to B's dock window and make it multi-column
3. Try to detach B, will result in a crash
Removes tons of code but looks ugly because it uses GTK_STOCK_GO_DOWN
currently, will fix that. Also did some random small cleanups and
removed unused members from the instance struct.
Move g_list_copy() out from gimp_dock_columns_get_docks(). Fixes at
least one memory leak (in gimp_dock_window_get_dock()) and feels nicer
and more flexible.
The insert position for new column in GimpDockColumns was sometimes
wrong, the problem was in gimp_dock_separator_get_insert_pos() not
return an index but a GtkAnchorType. Convert from GtkAnchorType to an
insert index.
When dropping a dockable on a dock separator on the side of e.g. a
dock window, a new column of dockables will be created. This allows
multi-column dock window setups.
Put a GimpDockColumns inside GimpDockWindow so that there can be more
than one dock inside a dock window. For now,
gimp_dock_window_get_dock() returns the first dock. Eventually need to
return all docks and refactor the other code as needed.
Add gimp_dialog_factory_dock_window_new() since we need to be able to
create only dock windows when going from single-window mode back to
multi-window.
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.
Allow to set the dropped callback after dock separator construction.
We need this in order to move the dock separators into a common widget
for which the callback to use is not known at construction time.
It keeps around its children as offscreen widgets and renders them
using a (potantially) arbitrary cairo_matrix_t (the actual API allows
for arbitrary alignment wihin the container and rotating).
(gimp_button_menu_position): reorder the code, use the new
gdk_window_get_root_coords() and pass it coordinates that include
the widget's offset within its parent gdk window.
In places where the pattern
if (show)
gtk_widget_show (widget);
else
gtk_widget_hide (widget);
is used, change to
gtk_widget_set_visible (widget, show);
Also do some other minor cleanups.
* app/core/gimpdynamics.c: remove all boolean properties and add the
outputs as properties instead. Make sure changes on the outputs get
notified on the dynamics object.
* app/widgets/gimpdynamicseditor.c: change widget creation accordingly,
also copy around the properties correctly when copying between
dynamics objects (fixes NULL filenames on GimpData).
Move the GtkPaned management code into gimp_widgets_add_paned_widget()
and gimp_widgets_remove_paned_widget() in gimpwidgets-utils.[ch] so we
can share this code for GimpDockColumns later.
For now, only show dock separators when they are needed, not all the
time. We need a better solution eventually, but at least docks in the
image window doesn't look terrible any longer.
When 'Single-window mode is enabled, move the toolbox and existing
docks into the image window. Needs a lot of more work but is
functional enough for curious people.
Implemented by adding a new GimpUIConfigurer component that has global
knowledge. There is a single application instance of this
component. It subscribes to changes in the single-window-mode config
property and adjusts the UI accordingly.
Add a "allow-dockbook-absence" property to the GimpDockWindow which is
set to TRUE for the dock window for the toolbox so that it is not
kiled when the last dockbook is removed.
The toolbox toplevel is no longer the dock, do some minor adjustments
to compensate for this, namely sending the toolbox (which is a dock)
as data to callbacks.
Make GimpDock be a GtkVBox instead of a GimpDockWindow. This means we
can now put a GimpDock anywhere, including inside an image window.
In order to do this we need to:
* Separate dock and dock window creation in the dialog factory and
add a couple of new dock window constructors
* Change gimp_dialog_factory_dock_new() to not only create a dock,
but also create a dock window and then combine those two
* Change the dock constructor to take a GimpUIManager since they
depend on that during their construction. We get the ui manager
from the dock window, but we can't create the dock *inside* the
dock window, we have to add the dock later. So we create the dock
window first and then pass its ui manager to the dock constructors
* Make some other minor adaptions, mostly with
gimp_dock_window_from_dock() and gimp_dock_window_get_dock()
Change the GimpDialogFactory signals "dock-added" and "dock-removed"
to "dock-window-added" and "dock-window-removed". Doing this makes
sense for a couple of reasons. First of all, the dialog factory is
built around top-levels. Second of all, the listeners to the signals
(such as the "recently closed docks" construct) work on a
gtk-window-level, not a dock level.
This change is a preparation for when GimpDock will stop being a
GimpDockWindow.
(gimp_layer_tree_view_mask_update): call
gimp_layer_tree_view_update_borders() unconditionally; not only when a
mask has been added, but also when it has been removed.
Rename gimp_session_info_set_geometry() to
gimp_session_info_apply_geometry() and gimp_session_info_get_geometry
to gimp_session_info_read_geometry(). The old functions were not
getters and setters and thus the names were misleading.
Simplify the code a bit by replacing the 'toplevel_entry' and
'dockable_entry' members in GimpSessionInfo with a single
'factory_entry'. We compensate for this by adding a 'dockable'
gboolean to GimpDialogFactoryEntry.
Add GimpSessionInfo getters for a bunch of dialog factory entry
fields. This moves much of the GimpDock special casing to a common
place and also reduces direct access to session info fields.
The new function is called after the item is inserted. This is a much
smaller change than turning all vfuncs into signals just to be able
connect_after to one of them.
In preparation for making GimpDock inherit from a non-window, stop
casting GimpDocks to GimpDockWindows. Instead look up the toplevel
widget for a dock and get the dock window that way.
Update export filename priorities according to changes in spec. Also
consistently use GIMP_FILE_EXPORT_URI_KEY instead of
GIMP_FILE_EXPORT_TO_URI_KEY. They have the same value.
Collapsing the tree gets rid of any selection in the collapsed branch,
and doesn't restore it upon exapnding. So connect to the
GtkTreeView::row-expanded signal and select the active item manually.
Had to add evil hack that makes sure we don't try this on child items
that are currently being inserted, because our parent class has no
choice but to expand the tree while the item is not completely
inserted in all subclasses yet.
In order to allow the toolbox dock to set geometry hints on the
GtkWindow it is in, introduce host geometry hint setting through a new
virtual function GimpDock::set_host_geometry_hints() and a new
"geometry-invalidated" signal.
Docks that needs to setup geometry hints on the window they are in
call gimp_dock_invalidate_geometry(). The GimpDockWindow will listen
to this and give the dock a chance to set geometry hints (or any setup
really) on the GimpDockWindow.
Add a "title-invalidated" signal to GimpDock and a virtual function
GimpDock::get_title(). When GimpDocks have a state change that their
title depends on they call gimp_dock_invalidate_title(). The
GimpDockWindow listens to this signal and update its window title
using GimpDock::get_title() in an idle handler.
Move the dock window related themeing namely default dock heght and
font scale from GimpDock to GimpDockWindow to get rid of yet another
GtkWindow dependency from GimpDock.
Note that this change requires gtkrc updates where "GimpDock::" needs
to be repaced with "GimpDockWindow::".
Add a GimpDialogFactory property to GimpDockWindow so that it can get
rid of its GimpDock dependency. We need to call the property
"gimp-dialog-factory" instead of "dialog-factory" though as long as
GimpDock subclasses GimpDockWindow.
Move the GimpUIManager from GimpImageDock to GimpDockWindow. This
includes making the ui_manager_name class-member of GimpImageDock a
normal instance member of GimpDockWindow since the UI manager name no
longer can be configured at the class level.
The dock needs to listen to image changes in the context and not only
display changes since the introduction of the empty-image-window does
not cause any display changes when creating the first image.
The GimpDockWindow will need to have a GimpContext so add such a
property but call it "gimp-context" for now to avoid clashing with
"context" of GimpDock.
Introduce GimpDockWindow and make GimpDock inherit from it. Right now
it is just a GimpWindow, but window logic from GimpDock and subclasses
will gradually be moved here so that we eventually can make GimpDock a
GtkBin. That in turn will allow us to put several GimpDocks next to
each other in columns, or GimpDocks in an image window.
Use the new API whenever we want to determine the item's effective
lock state (whether we can write to the item's content or not). Use
gimp_item_get_lock_content() only in code that actually deals with
*this* item's locked state, which is only the PDB wrappers and GUI to
modify the flag on the item itself.
Begin to consider GimpObject::name as private and always use
gimp_object_get_name(). Change gimp_object_get_name() to take an
untyped pointer so we don't have to do so awfully many casts. There is
a runtime check for the type inside the function anyway.
- 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".
Even though a user can only save to XCF in File->Save, the "All
images" filter shall show all images to allow a user to steal names
from non-XCF images and vice versa for File->Export, so make that
happen.
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/widgets/gimpitemtreeview.[ch]: add class members for the lock
content button's icon, tooltip and help_id and use them when
creating the button. Create the button in constructor() instead of
init() so we have access to our real class structure without the
need for a custom get_type() function.
* app/widgets/gimpdrawabletreeview.c: configure the button as "Lock pixels".
* app/widgets/gimpvectorstreeview.c: configure it as "Lock path strokes".
- new API to add widgets to a box of options, for stuff like the paint
mode menu and opacity scale. Set it sensitive automatically and
update its spacings in GtkWidget::style_set().
- new API to get a hbox for "lock" toggles, for stuff like lock
pixels and lock alpha.
This reverts commit d2e1f2ac74. If we
keep the layer group button in 2.7.0 people will expect layer groups
to fully work and get mad when that is not the case. We can enable it
again after the release.
Since Ctrl+E previously meant something harmless, don't use that
keyboard shortcut for the destructive command 'File->Overwrite'. We
still keep Ctrl+E for 'File->Export to' though, and we do this by
having 'File->Overwrite' as a separate GtkAction with its own keyboard
shortcut slot.
* 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/gimpcontainertreeview-dnd.c
(gimp_container_tree_view_real_drop_possible): support DND within a
tree and make sure a group item is not dropped into itself.
* app/widgets/gimpitemtreeview.c (gimp_item_tree_view_drop_viewable):
implement intra-container reordering within all branches; print a
message for inter-container reordering because that's not yet
implemented in the core.
* app/widgets/gimpcontainerview.h: add "gboolean model_is_tree"
to GimpContainerViewInterface.
* app/widgets/gimpcontainerview.c: default to FALSE and enable the
commented-out optimization in remove_container() for list-only
container views.
* app/core/gimpimage.[ch]: make the parent parameter public in
add_layer(), add_layers(), add_channel() and add_vectors().
* app/vectors/gimpvectors-import.[ch]: add parent parameters to
the vectors import functions.
* app/core/gimpchannelundo.[ch]
* app/core/gimplayerundo.[ch]
* app/vectors/gimpvectorsundo.[ch]
* app/core/gimpimage-undo-push.[ch]: remember the parent item when
removing layers, channels and vectors.
* app/actions/channels-commands.c
* app/actions/debug-commands.c
* app/actions/edit-commands.c
* app/actions/layers-commands.c
* app/actions/vectors-commands.c
* app/core/gimp-edit.c
* app/core/gimpimage-duplicate.c
* app/core/gimpimage-merge.c
* app/core/gimpimage-quick-mask.c
* app/core/gimplayer-floating-sel.c
* app/core/gimpselection.c
* app/core/gimptemplate.c
* app/dialogs/file-open-dialog.c
* app/display/gimpdisplayshell-dnd.c
* app/text/gimptext-compat.c
* app/tools/gimptexttool.c
* app/tools/gimpvectortool.c
* app/widgets/gimptoolbox-dnd.c
* app/xcf/xcf-load.c
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/paths.pdb
* tools/pdbgen/pdb/vectors.pdb: pass NULL as parent item to above
functions and add FIXMEs all over the place because there is some
more hacking needed to make adding with index = -1 (on top of the
current item) work again.
* app/pdb/image-cmds.c
* app/pdb/paths-cmds.c
* app/pdb/vectors-cmds.c: regenerated.
* app/core/gimpimage-duplicate.c: duplicate the original image's
tree structure in the copy.
* app/widgets/gimpitemtreeview.[ch]: add parent to GimpAddItemFunc,
add utility function gimp_item_tree_view_get_drop_index() which
figures where to add something dropped to an item tree.
* app/widgets/gimpchanneltreeview.c
* app/widgets/gimplayertreeview.c
* app/widgets/gimpvectorstreeview.c: changed accordingly, using above
new GimpItemTreeView API.
* 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.
Factor out large portions of identical code into new utility functions
gimp_container_view_connect_context() and
gimp_container_view_disconnect_context().
Keep around the handler IDs for the "name-changed" signals of the
container's children in a hash table that maps containers to handler
IDs and move adding/removing of the handler to
add_container()/remove_container(). This way the name-changed code is
prepared for handling multiple containers.
In preparation of having a tree of containers, added
gimp_container_view_add_container(),
gimp_container_view_remove_container() and
gimp_container_view_remove_foreach()
which do all the job of inserting/removing items and
connecting/disconnecting the "add", "remove" and "reorder" signals.
Also refactored things so when the toplevel container freezes/thaws,
it simply gets removed from the view instead of ignoring its signals.
gimp_container_view_real_set_container()
gimp_container_view_freeze()
gimp_container_view_thaw(): use the new add_container() and
remove_container() APIs and fix the code for the unlikely case
that a frozen container gets added/removed.
GHashTable has g_hash_table_remove_all() since GLib 2.12, so there is
no need any longer to clear the hash table by destroyung it. Instead,
keep the hash around during the view's entire lifetime and remove all
re-creation code and all checks for its existence.
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.
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.
Rename gimptoolview.[ch] to gimptooleditor.[ch]. The contents of the
file has already gone through this change, we do the file name change
separately for better diffs. Part of fix for bug #500930.
Convert the GimpToolView dockable to a non-dockable GimpToolEditor,
but wait with renaming the file so that we get better diffs. Part of
fix for bug #500930.
Remove the transient-docks setting for gimprc. What GIMP tried to
accomplish with this enabled is much better accomplished by the window
manager with the docks set to the 'Utility window' window hint. See
discussion in bug #322577.
Get rid of artificial compiler warnings generated with the #warning
directive. They pollute the build output and don't work as incentives
for fixing stuff.
There is GtkSettings:gtk-enable-mnemonics: now, so there is no
reason to do the same in GIMP:
* app/config/gimpguiconfig.[ch]: turn "menu-mnemonics" into a dummy.
* app/dialogs/preferences-dialog.c: remove its GUI.
* app/widgets/gimpactionfactory.[ch]
* app/widgets/gimpactiongroup.[ch]: remove infrastructure for disabling
menu mnemonics.
* app/actions/actions.c: bye bye glue code.
* app/widgets/gimplayertreeview.c (gimp_layer_tree_view_layer_clicked):
when ALT is pressed, select the layer's alpha. SHIFT and CONTROL work
as usual to add, subtract and intersect.
* app/widgets/gimpchanneltreeview.c
* app/widgets/gimpvectorstreeview.c: add "clicked" handlers here too
and do the same select-on-alt-click thing.
Add a 'Use default comment' button to the Comment tab in Image
Properties that if clicked sets the image comment to the default
comment set in Preferences.
- artificially limit the popup's height again so scrolling gets some testing.
- make sure the scroll buttons' sensitivity is always correct.
- remove obsolete utility function and other cleanups.
- reorder instance struct and add some spacing
- rename member "timeout_id" to "scroll_timeout_id"
- clean up constructor() even more (still the wrong place to
do all these things)
Closing whatever popup by click on dead space within it is a no no,
otherwise one-pixel mis-clicks inside the widget make it go away,
which is totally unexpected.
- artificially limit the popup's height again so scrolling gets some testing.
- make sure the scroll buttons' sensitivity is always correct.
- remove obsolete utility function and other cleanups.
- reorder instance struct and add some spacing
- rename member "timeout_id" to "scroll_timeout_id"
- clean up constructor() even more (still the wrong place to
do all these things)
Closing whatever popup by click on dead space within it is a no no,
otherwise one-pixel mis-clicks inside the widget make it go away,
which is totally unexpected.
Not all actions have procedures associated with them, for example
unused "plug-in-recent-[N]" actions, so check for NULL before we
invoke the plug-in action
* app/widgets/gimptextproxy.c: also swallow the "toggle-overwrite"
signal.
* app/tools/gimpdrawtool. [ch] (gimp_draw_tool_draw_text_cursor): add
"gboolean overwrite" which causes the cursor to be drawn as block.
* app/tools/gimptexttool.[ch]: implement overwriting, toggling it,
and changing the text cursor accordingly.
* app/widgets/gimpwindow.c: treat GimpCanvas as a text widget and
dispatch all key events to it before invoking menu shortcuts.
* app/display/gimpdisplayshell-callbacks.c: treat all events on the
empty display as unhandled, not handled.
* app/tools/gimptexttool.c: use the right API for invoking the proxy
text view's bindings. Handle some more cursor navigation request and
swallow text deletion requests we don't handle instead of always
doing what the delete key does.
Use 0666 as permissions instead of 0644 and let the user's umask care
about restricting, so creating a file with open() behaves the same way
as with fopen().
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.
Gather save dialog uri defaults in one place. Move the small bits of
it from file_save_dialog_new() to gimp_file_dialog_set_save_image()
where the rest is.
The source filename convention would indicate that gimpfile.h
holds code for the GimpFile object. Rename it to gimp-file.h
to make clear that it doesn't.
Rename "gimp-image-save-a-copy" key to "gimp-file-save-a-copy-uri"
since the key is more logical to have in the gimp file namespace and
the "-ur"i suffix is more consistent with other similar keys.
2009-03-28 Michael Natterer <mitch@gimp.org>
Bug 555025 – Action GEGL box widgets weirdness
Must not set GDK_HINT_MIN_SIZE if we don't actually set a minimum
size, or the window will be shrinkable to zero and it won't
expand automatically when its contents' requisition grows.
* app/widgets/gimpdialogfactory.[ch]: add hackish API
gimp_dialog_factory_set,get_has_min_size() because GTK+ itself
has no API for querying a window's GdkWindowHints.
(gimp_dialog_factory_set_user_pos): set GDK_HINT_MIN_SIZE only if
the window was being marked as having a minimum size using above
new API.
* app/widgets/gimptoolbox.c (gimp_toolbox_set_geometry)
* app/display/gimpdisplayshell.c (gimp_display_shell_style_set):
call gimp_dialog_factory_set_has_min_size (window, TRUE).
svn path=/trunk/; revision=28224
2009-03-23 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcontainerbox.c: use accessors instead of
scrolled_window->vscrollbar.
svn path=/trunk/; revision=28206
2009-03-23 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcombotagentry.c: use accessors instead of
widget->window and widget->style.
svn path=/trunk/; revision=28205
2009-03-22 Michael Natterer <mitch@gimp.org>
* app/widgets/gimptagentry.c: use "list" as variable name for
iterators to be consistent with the rest of GIMP; various code
cleanups.
svn path=/trunk/; revision=28196
2009-03-22 Michael Natterer <mitch@gimp.org>
* app/widgets/Makefile.am
* app/widgets/gtkscalebutton.[ch]: remove this evil hack.
* app/widgets/gimpscalebutton.[ch]
* app/widgets/gimppropwidgets.c: minor adjustments so the widget
from GTK+ gets used.
svn path=/trunk/; revision=28194
2009-03-07 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcontainercombobox.c
(gimp_container_combo_box_changed): do not attempt to chain up
in
a signal callback.
svn path=/trunk/; revision=28124
2009-03-05 Sven Neumann <sven@gimp.org>
* app/widgets/gimpviewrendererimagefile.c
(gimp_view_renderer_imagefile_get_icon)
* plug-ins/print/print.c (query): removed GTK+ version checks
that
have become obsolete.
svn path=/trunk/; revision=28111
2009-03-02 Michael Natterer <mitch@gimp.org>
* app/widgets/gimptagentry.c (gimp_tag_entry_expose): use
gtk_paint_layout() instead of fiddling with a PangoRenderer
manually.
svn path=/trunk/; revision=28096
2009-03-02 Michael Natterer <mitch@gimp.org>
* app/widgets/gimptagentry.c (gimp_tag_entry_key_press): allow to
leave the widget with Ctrl+Tab. Handle GDK_KP_Tab and
GDK_ISO_Left_Tab.
svn path=/trunk/; revision=28095
2009-03-02 Michael Natterer <mitch@gimp.org>
* app/core/gimptagged.[ch]: add gimp_tagged_set_tags() which
takes a GList of tags.
* app/widgets/gimptagentry.c (gimp_tag_entry_assign_tags): use it.
(gimp_tag_entry_item_set_tags): remove.
svn path=/trunk/; revision=28094
2009-02-26 Sven Neumann <sven@gimp.org>
* app/gui/gui.c (gui_restore_callback): connect to changes of
the
"user-manual-online" gimprc property and kill the gimp-help
plug-in as it caches the location of the help pages.
* app/widgets/gimphelp.[ch]: added
gimp_help_user_manual_changed()
for this purpose.
svn path=/trunk/; revision=28073
2009-02-12 Michael Natterer <mitch@gimp.org>
Bug 567840 – GIMP's GtkScaleButton conflicts with GTK's
* app/widgets/gtkscalebutton.c: rename the type to
"GimpGtkScaleButton" so we don't crash if the real
GtkScaleButton type is registered too.
svn path=/trunk/; revision=28015
2009-02-09 Michael Natterer <mitch@gimp.org>
Bug 569470 – pls, introduce an option 'how many latest presets for
color curves should be saved'
* app/config/gimprc-blurbs.h
* app/config/gimpguiconfig.[ch]: add integer property
"image-map-tool-max-recent" which defaults to ten. Adding a GUI
for this IMO needs discussion, the value of ten seems appropriate.
* app/widgets/gimpsettingsbox.[ch]
(gimp_settings_box_add_current): add "gint max_recent" parameter
and limit the number of recent settings to this number.
* app/tools/gimpimagemaptool.c (gimp_image_map_tool_response):
pass the new settings property to above function.
svn path=/trunk/; revision=28004
2009-01-24 Michael Natterer <mitch@gimp.org>
Bug 568890 – don't rely on GtkAction implementation details
* app/widgets/gimpuimanager.c (gimp_ui_manager_menu_item_select):
use gtk_widget_get_action() instead of g_object_get_data(),
which relies on the name of the data key.
svn path=/trunk/; revision=27939
2009-01-22 Tor Lillqvist <tml@iki.fi>
Bug 559408 - Brushes dragged to the image window look strange
* app/widgets/gimppixbuf.c (gimp_pixbuf_format_compare): Drop
Windows-specific code to prefer BMP. The BMP format written by
gdk-pixbuf doesn't support alpha. PNG is better. Note that the
same bug report also takes up a different problem.
svn path=/trunk/; revision=27928
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
2009-01-04 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcombotagentry.c
(gimp_combo_tag_entry_constructor): connect to entry->container's
signals with g_signal_connect_object() so the entry can be
destroyed without warning/crashing.
svn path=/trunk/; revision=27895
* app/widgets/gimpitemtreeview.[ch]: Make instance member private
and add getter that didn't already exist.
(gimp_item_tree_view_get_new_button)
(gimp_item_tree_view_get_edit_button): New getters.
* app/actions/actions.c
* app/widgets/gimpvectorstreeview.c
* app/widgets/gimplayertreeview.c
* app/widgets/gimpdrawabletreeview.c
* app/widgets/gimpchanneltreeview.c: Use new getters.
svn path=/trunk/; revision=27827
Merge the rest of the tagging code developed on the tagging branch
by Aurimas Juška. Development will now continue in trunk.
* app/core/gimptag.[ch]: New files (not strictly true but almost)
implementing the represention of a tag.
* app/core/gimptagcache.[ch]: New files implementing functionality
for loading and saving tags to tags.xml, and assigning loaded tags
to tagged objects.
* app/core/gimpfilteredcontainer.[ch]: New files implementing a
tag filtered GimpContainer.
* app/widgets/gimptagentry.[ch]: New files implementing a
GtkEntry-like widget for entering tags.
* app/widgets/gimpcombotagentry.[ch]: New files implementing a
combobox-like widget for selecting tags.
* app/widgets/gimptagpopup.[ch]: New files implementing a popup of
all available tags that can be selected and combined in a
checkbox-like way.
* app/core/gimp.[ch]: Add a GimpTagCache member and manage tag
assignment and saving and loading to/from tags.xml.
* app/widgets/gimpdatafactoryview.c: Add the tag query and tag
assignment widgets to the UI and show the tag filtered items
instead of all items.
* app/core/Makefile.am
* app/widgets/Makefile.am: Add new files.
* app/core/core-types.h
* app/widgets/widgets-types.h: Add new types.
svn path=/trunk/; revision=27816
Partial merge of code from Aurimas Juška.
* app/widgets/gimpbrushfactoryview.c: Use the same method for
getting the GimpContainer both when adding and when removing the
spacing-changed handler. It was just a coincidence that the
previously different methods retured the same GimpContainer.
svn path=/trunk/; revision=27815
* app/widgets/gimpdatafactoryview.[ch]
(gimp_data_factory_view_have)
(gimp_data_factory_view_get_children_type)
(gimp_data_factory_view_has_data_new_func): New helper functions
to lesser level of indirection in client code.
* app/actions/data-commands.c: Use them.
svn path=/trunk/; revision=27814
* app/widgets/gimpdatafactoryview.[ch]: Make instance members
private and add getters for accessed members.
(gimp_data_factory_view_get_edit_button)
(gimp_data_factory_view_get_duplicate_button)
(gimp_data_factory_view_get_data_factory): New getters.
* app/actions/data-commands.c
* app/widgets/gimppatternfactoryview.c: Use new getters.
svn path=/trunk/; revision=27813
2008-12-04 Sven Neumann <sven@gimp.org>
* app/widgets/gimpactiongroup.[ch]: also use the translation
context for the tooltips.
* app/actions/*.c: added translation context to all tooltips.
Also
improved some tooltips while I was on it.
svn path=/trunk/; revision=27757
2008-12-03 Sven Neumann <sven@gimp.org>
* app/widgets/gimpactiongroup.[ch]: added an extra parameter for
the translation context to all gimp_action_group_add methods.
* app/actions/*.c: added a translation context to all action
labels. Also unified and improved the labels and tooltips in a
few
places.
svn path=/trunk/; revision=27754
2008-12-03 Sven Neumann <sven@gimp.org>
* app/widgets/gimpactiongroup.c: check that the action name is
unique before adding it to a GimpActionGroup.
svn path=/trunk/; revision=27751
2008-11-21 Sven Neumann <sven@gimp.org>
* app/widgets/gimpviewrenderervectors.c
(gimp_view_renderer_vectors_draw): inlined local variables that
are only used once.
svn path=/trunk/; revision=27703
* 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-11-13 Sven Neumann <sven@gimp.org>
* app/core/gimpimage.[ch]: added gimp_image_get_display_name().
* app/dialogs/palette-import-dialog.c
* app/display/gimpdisplayshell-close.c
* app/display/gimpdisplayshell-title.c
* app/pdb/gimppdb-utils.c
* app/widgets/gimpviewabledialog.c: use the new method instead
of
getting the image URI and mangling it with
file_utils_uri_display_basename().
svn path=/trunk/; revision=27637
* app/widgets/gimpcursorview.[ch]: Don't expose implementation
details, introduce internal helper functions, and make coordinates
outside the image be represented with an italic font instead of
enclosed in parenthesis.
svn path=/trunk/; revision=27578
2008-11-06 Sven Neumann <sven@gimp.org>
* tools/gimp-mkenums: use NC_() to mark enum values for
translation.
Use a lower-case short form of the type name as translation
context.
* libgimp/libgimp-intl.h: define the NC_() macro as noop.
* libgimpbase/gimpbasetypes.[ch]
* libgimpbase/gimpbase.def: added new functions to set and
get a translation context on an enum type.
* app/base/Makefile.am
* app/core/Makefile.am
* app/display/Makefile.am
* app/paint/Makefile.am
* app/plug-in/Makefile.am
* app/text/Makefile.am
* app/tools/Makefile.am
* app/widgets/Makefile.am
* libgimp/Makefile.am
* libgimpbase/Makefile.am:
* libgimpconfig/Makefile.am
* libgimpthumb/Makefile.am
* libgimpwidgets/Makefile.am: register the translation context
with the enum types.
* app/display/display-enums.h
* libgimpbase/gimpbaseenums.h
* libgimpconfig/gimpcolorconfig-enums.h: removed old-style
explicit
translation context.
* app/base/base-enums.c
* app/core/core-enums.c
* app/display/display-enums.c
* app/paint/paint-enums.c
* app/plug-in/plug-in-enums.c
* app/text/text-enums.c
* app/tools/tools-enums.c
* app/widgets/widgets-enums.c
* libgimpbase/gimpbaseenums.c
* libgimpconfig/gimpcolorconfig-enums.c
* libgimpwidgets/gimpwidgetsenums.c: regenerated.
svn path=/trunk/; revision=27562
* app/widgets/gimpwidgets-constructors.c
(gimp_paint_mode_menu_new): Arrange layer modes into more logical
and useful groups.
svn path=/trunk/; revision=27540
2008-11-02 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.[ch]: add new functions
gimp_image_get_layer_iter(), channel_iter() and vectors_iter()
which return the GList inside the resp. GimpList.
* app/actions/channels-actions.c
* app/actions/layers-actions.c
* app/actions/vectors-actions.c
* app/core/gimpimage-convert.c
* app/core/gimpimage-crop.c
* app/core/gimpimage-duplicate.c
* app/core/gimpimage-flip.c
* app/core/gimpimage-item-list.c
* app/core/gimpimage-merge.c
* app/core/gimpimage-resize.c
* app/core/gimpimage-rotate.c
* app/core/gimpimage-scale.c
* app/core/gimpimage.c
* app/core/gimpimage.h
* app/core/gimpprojection-construct.c
* app/display/gimpdisplayshell-draw.c
* app/file/file-open.c
* app/tools/gimpaligntool.c
* app/tools/gimpdrawtool.c
* app/vectors/gimpvectors-compat.c
* app/vectors/gimpvectors-export.c
* app/widgets/gimplayertreeview.c
* app/xcf/xcf-save.c
* tools/pdbgen/pdb/image.pdb: use the new functions instead of
peeking both into the image and the list. Remove inclusions of
"gimplist.h" or change them into "gimpcontainer.h" if needed.
* app/pdb/image-cmds.c: regenerated.
svn path=/trunk/; revision=27524
2008-10-31 Sven Neumann <sven@gimp.org>
Bug 558660 – help behavior for locales without manual
translation
* app/widgets/gimphelp.c (gimp_help_user_manual_is_installed):
as a fallback check for the english user manual.
svn path=/trunk/; revision=27500
2008-10-29 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpstrokeeditor.c: move the "Antialias" toggle from
here...
* app/widgets/gimpfilleditor.c: ...to here because it makes sense
for both filling and stroking.
svn path=/trunk/; revision=27458
2008-10-28 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpwidgets-utils.[ch]: added "gboolean below" to
gimp_enum_radio_frame_add() and gimp_enum_radio_box_add() and
place the widget right of the radio button unless "below" is TRUE.
* app/dialogs/convert-dialog.c
* app/dialogs/layer-add-mask-dialog.c
* app/tools/gimpbucketfilloptions.c
* app/tools/gimpclonetool.c
* app/tools/gimpperspectiveclonetool.c
* app/widgets/gimpfilleditor.c: pass TRUE so everything stays as-is.
svn path=/trunk/; revision=27450
2008-10-26 Michael Natterer <mitch@gimp.org>
Merge on-canvas GSoC project:
* configure.in: check for pangocairo.
* app/Makefile.am
* app/text/Makefile.am: add its CFLAGS and LIBS.
* app/text/gimptext-bitmap.[ch]
* app/text/gimptext-private.h
* app/text/gimptext-vectors.[ch]
* app/text/gimptextlayer.c
* app/text/gimptextlayout-render.c
* app/text/gimptextlayout.c: port to pangocairo.
* menus/Makefile.am
* menus/text-tool-menu.xml
* app/menus/menus.c
* app/actions/Makefile.am
* app/actions/actions.c
* app/actions/text-tool-actions.[ch]
* app/actions/text-tool-commands.[ch]: add a context menu for the
text tool similar to GtkEntry's context menu.
* app/tools/gimprectangletool.[ch]: add "narrow-mode" property.
* app/tools/gimptextoptions.[ch]
* app/widgets/gimptexteditor.[ch]: take a text buffer for the
standalone text editor window instead of creating one internally.
* app/tools/gimptexttool.[ch]: all the new wonderful on-canvas
text editing logic. Wheee!
svn path=/trunk/; revision=27419
2008-10-25 Michael Natterer <mitch@gimp.org>
* app/core/gimpfilloptions.[ch]: add non-serializable properties
pattern-view-type and pattern-view-size which are used only by the
new UI below.
* app/widgets/gimpfilleditor.[ch]: added boolean edit-context
property. If TRUE, add widgets to edit the context's foreground and
pattern. Add "edit_context" parameter to gimp_fill_editor_new().
* app/widgets/gimpstrokeeditor.[ch]: add the same parameter here.
* app/widgets/gimpwidgets-utils.[ch]: add gimp_enum_radio_box_add()
which does the same as the existing gimp_enum_radio_frame_add().
* app/dialogs/stroke-dialog.c: pass FALSE for "edit_context"
because this dialog takes its foreground and pattern from the user
context and doesn't need it's own GUI for them.
svn path=/trunk/; revision=27392
2008-10-24 Michael Natterer <mitch@gimp.org>
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpfilleditor.[ch]: new widget factored out of
GimpStrokeEditor.
* app/widgets/gimpstrokeeditor.[ch]: derive from GimpFillEditor
and remove UI for the properties of GimpFillOptions.
svn path=/trunk/; revision=27390
2008-10-24 Sven Neumann <sven@gimp.org>
* app/widgets/gimpdialogfactory.c
(gimp_dialog_factories_toggle):
to be on the safe side, always show hidden dialogs when the Tab
key is used. It should not be possible to get a Tab key-press
while all displays are iconified, but you never know ...
svn path=/trunk/; revision=27385
2008-10-24 Sven Neumann <sven@gimp.org>
Bug 556896 – Dialogs don't get minimized with single image
window
* app/widgets/gimpdialogfactory.[ch]: renamed the new methods to
gimp_dialog_factories_{show|hide}_with_display().
Remember if the dialogs were hidden using
gimp_dialog_factories_hide_with_display() or using
gimp_dialog_factories_toggle() and keep this into account when
making them visible again. This ensures that dialogs that were
hidden using the Tab key won't be shown when the image window is
uniconified.
* app/display/gimpdisplayshell.c
(gimp_display_shell_window_state_event): changed accordingly.
svn path=/trunk/; revision=27384
2008-10-23 Sven Neumann <sven@gimp.org>
Bug 556896 – Dialogs don't get minimized with single image
window
* app/display/gimpdisplay-foreach.[ch]: added utility function
to
get the number of visible (not withdrawn or iconified) displays.
* app/widgets/gimpdialogfactory.[ch]: added functions to hide
and
show the dock windows. Changed gimp_dialog_factories_toggle() to
use the new functions.
* app/display/gimpdisplayshell.c
(gimp_display_shell_window_state_event): hide the docks if the
last display is iconified. Unhide them if a display is
uniconified. Probably needs more work ...
svn path=/trunk/; revision=27374
2008-10-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimpprogressbox.c: set box->progress to NULL in
destroy() and check for progress being NULL in various places so
we don't crash on API calls after the widget is destroyed.
svn path=/trunk/; revision=27362
2008-10-22 Sven Neumann <sven@gimp.org>
Bug 555246 – gimp crashes when a file is opened while a preview
is
generating
* app/widgets/gimpthumbbox.c: set box->progress to NULL in
destroy() and check for progress being NULL in various places so
we don't crash on API calls after the widget is destroyed.
svn path=/trunk/; revision=27360
2008-10-21 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpfiledialog.c: set dialog->progress to NULL in
destroy() and check for progress being NULL in various places so
we don't crash on API calls after the widget is destroyed.
svn path=/trunk/; revision=27354
2008-10-20 Sven Neumann <sven@gimp.org>
* app/widgets/gimperrorconsole.c (gimp_error_console_init):
don't
make the font size even smaller. We already use a smaller font
in
the dock windows.
svn path=/trunk/; revision=27341
2008-10-20 Sven Neumann <sven@gimp.org>
* app/widgets/gimpgradienteditor.c (view_events)
(control_events):
use pointer coordinates from the passed event instead of calling
gtk_widget_get_pointer().
svn path=/trunk/; revision=27340
2008-10-16 Sven Neumann <sven@gimp.org>
* app/widgets/gimpviewrenderervectors.c
(gimp_view_renderer_vectors_draw): just some cleanup.
svn path=/trunk/; revision=27293
2008-10-14 Sven Neumann <sven@gimp.org>
* app/widgets/gimpdialogfactory.c
(gimp_dialog_factory_add_dialog):
let new docks appear at the pointer position.
svn path=/trunk/; revision=27282
* app/widgets/gimpdockseparator.c (gimp_dock_separator_new): Add a
GtkAnchorType member to GimpDockSeparator that specifies where a
dropped dockable shall be inserted.
(gimp_dock_separator_drag_drop): Get rid of the ugly hack where
the role of a given separator was based on its position as a child
in its container. Simply decide what role the separator has by
loooking at its anchor-member.
* app/widgets/gimpdock.c (gimp_dock_init)
(gimp_dock_add_book): Give the GimpDockSeparators their
appropriate roles directly at their construction.
svn path=/trunk/; revision=27218
2008-10-09 Michael Natterer <mitch@gimp.org>
Add GEGL_CFLAGS and #includes as if gimpdrawable.h and gimpimage.h
had a GEGL dependency (they will have in the next commit, but I
wanted to keep the commit separate).
* app/dialogs/Makefile.am
* app/file/Makefile.am
* app/gui/Makefile.am
* app/menus/Makefile.am
* app/paint/Makefile.am
* app/plug-in/Makefile.am
* app/text/Makefile.am
* app/vectors/Makefile.am
* app/widgets/Makefile.am
* app/xcf/Makefile.am: add GEGL_CFLAGS.
* app/actions/*.c
* app/core/*.c
* app/dialogs/*.c
* app/display/*.c
* app/file/*.c
* app/gui/*.c
* app/menus/*.c
* app/paint/*.c
* app/pdb/gimppdb-utils.c
* app/pdb/gimpprocedure.c
* app/plug-in/*.c
* app/text/*.c
* app/tools/*.c
* app/vectors/*.c
* app/widgets/*.c
* app/xcf/*.c: add <gegl.h> or replace <glib-object.h> by <gegl.h>
to all files which include a drawable subclass or gimpimage.h
* tools/pdbgen/app.pl: include <gegl.h> instead of <glib-object.h>
in all generated files.
* app/pdb/*-cmds.c: regenerated.
* data/images/gimp-splash.png: the goat is still sleeping.
By Aurore Derriennic.
svn path=/trunk/; revision=27202
2008-10-09 Michael Natterer <mitch@gimp.org>
Remove the last code duplication from the undo system (or if not
the last then at least the most ugly):
* app/core/gimpimage.[ch] (gimp_image_add_layer,channel,vectors):
add "gboolean push_undo" parameter and add the item without
touching undo if it's TRUE. Changed assertions from
g_object_is_floating() to !gimp_item_is_attached() so they also
take items from the undo stack and not only newly created ones.
(gimp_image_remove_layer,channel,vectors): add "push_undo"
parameter here too. Also add a "new_active" parameter where an
optional new active item can be passed.
(gimp_image_remove_layer,channel): these functions must not be
called with push_undo=FALSE and a floating selection attached to
the layer/channel. This can't currently happen; added warnings in
case other code is changed and makes it happen anyway.
* app/core/gimpchannelundo.c
* app/core/gimplayerundo.c
* app/vectors/gimpvectorsundo.c: use above functions to add/remove
items instead of duplicating (parts of) their code. Pass
push_undo=FALSE and the previously active item to the remove()
functions.
* app/actions/channels-commands.c
* app/actions/edit-commands.c
* app/actions/layers-commands.c
* app/actions/vectors-commands.c
* app/core/gimp-edit.c
* app/core/gimpchannelundo.c
* app/core/gimpimage-crop.c
* app/core/gimpimage-duplicate.c
* app/core/gimpimage-merge.c
* app/core/gimpimage-quick-mask.c
* app/core/gimpimage-scale.c
* app/core/gimplayer-floating-sel.c
* app/core/gimplayerundo.c
* app/core/gimpselection.c
* app/core/gimptemplate.c
* app/display/gimpdisplayshell-dnd.c
* app/text/gimptext-compat.c
* app/tools/gimptexttool.c
* app/tools/gimpvectortool.c
* app/vectors/gimpvectors-import.c
* app/vectors/gimpvectorsundo.c
* app/widgets/gimpchanneltreeview.c
* app/widgets/gimpitemtreeview.[ch]
* app/widgets/gimplayertreeview.c
* app/widgets/gimptoolbox-dnd.c
* app/widgets/gimpvectorstreeview.c
* app/xcf/xcf-load.c
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/paths.pdb: changed accordingly (pass TRUE
unless it's a new image like when loading and XCF file).
* app/pdb/image-cmds.c
* app/pdb/paths-cmds.c: regenerated.
svn path=/trunk/; revision=27200
2008-10-09 Michael Natterer <mitch@gimp.org>
Bug 134956 – Curves tool doesn't save free curves
* app/core/gimpmarshal.list
* app/widgets/gimpsettingsbox.[ch]: add signal "file-dialog-setup"
and emit it when the export/import file chooser is fully
constructed. Callbacks can then do additional things to the
dialog, like adding custom buttons.
* app/tools/gimpcurvestool.h
* app/tools/gimplevelstool.h: add boolean member
"export_old_format".
* app/tools/gimpcurvestool.c
* app/tools/gimplevelstool.c (gimp_*_tool_dialog): connect to
the settings box' "file-dialog-setup".
(gimp_*_tool_export_setup): new callback which adds a toggle to
the file choosers that allows to export to the old format.
Default saving the new format, we defaulted to the old one before.
(gimp_*_tool_settings_export): check the "export_old_format"
boolean and only save the cruft format if it is TRUE; chain up
otherwise, which generically saves the new format.
* app/tools/gimplevelstool.c (gimp_levels_tool_settings_import):
add the same file format detection code as in the curves tool
so it transparently loads old and new levels files.
svn path=/trunk/; revision=27194
2008-10-07 Michael Natterer <mitch@gimp.org>
Bug 555362 – gimp-remote is not working properly
* app/widgets/gimptoolbox-dnd.c (gimp_toolbox_dnd_init): add the
window itself as drop traget again so gimp-remote works.
svn path=/trunk/; revision=27164
2008-10-05 Michael Natterer <mitch@gimp.org>
Allow to "Open as Layers" in the empty display:
* app/widgets/gimpfiledialog.[ch]: add member
"gboolean open_as_layers". Rename gimp_file_dialog_set_image() to
gimp_file_dialog_set_save_image() and add
gimp_file_dialog_set_open_image() which sets both the image to
load layers into and the "open_as_layers" boolean.
* app/dialogs/file-open-dialog.c (file_open_dialog_response): look
at dialog->open_as_layers instead of dialog->image to decide whether
to open as layers (that's much more obvious). Enable open as layers
without existing image by creating the image if it doesn't exist.
* app/actions/file-commands.c (file_open_dialog_show): add "title"
parameter and take the uri from the image if none was passed. Use the
new gimp_file_dialog_set_open_image() instead of poking into the
dialog struct. Change callers to pass the title and not get the
uri from the image; instead always pass the image.
* app/actions/file-actions.c (file_actions_update): keep
"Open as Layers" sensitive even without image.
svn path=/trunk/; revision=27135
2008-10-02 Michael Natterer <mitch@gimp.org>
Bug 554646 – Opening Help crashes GIMP with lqr-plugin installed
* app/widgets/gimphelp.c (gimp_help_get_help_domains): need to
assign (*foo)[i] and not *foo[i] of a gchar** returned via return
value location.
svn path=/trunk/; revision=27113
2008-10-01 Tor Lillqvist <tml@novell.com>
* app/widgets/gtkscalebutton.c: : Don't #define _GNU_SOURCE on
Windows as it confuses newest mingw headers.
svn path=/trunk/; revision=27097
2008-09-30 Sven Neumann <sven@gimp.org>
* app/widgets/gimpwidgets-utils.[ch]: added
gimp_pango_layout_set_scale().
* app/gui/splash.c: set a smaller font size on the lower label.
svn path=/trunk/; revision=27088
2008-09-30 Sven Neumann <sven@gimp.org>
* app/widgets/gimpwidgets-utils.c
(gimp_pango_layout_set_weight):
actually use the passed weight.
svn path=/trunk/; revision=27087
image open.
* app/widgets/gimpdialogfactory.[ch]: Add 'toggle_visibility' to
GimpDialogFactory and as a parameter to gimp_dialog_factory_new(),
and set it there.
(gimp_dialog_factories_hide_foreach): Don't hide dialogs belonging
to factories with toggle_visibility FALSE.
* app/display/gimpdisplayshell-callbacks.c
(gimp_display_shell_canvas_tool_events): Move no-image event
handling to a new helper function, and make pressing Tab hide
windows.
* app/dialogs/dialogs.c (dialogs_init): Allow toggling visibility
for all factories except the display-factory.
svn path=/trunk/; revision=27077
2008-09-29 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdialogfactory.c
(gimp_dialog_factories_show_foreach)
(gimp_dialog_factories_hide_foreach): remove some casts that were
always useless and are even more useless now after the recent
readability improvement.
svn path=/trunk/; revision=27075
2008-09-24 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcontrollereditor.c
(gimp_controller_editor_edit_response): call
gimp_controller_editor_sel_changed() with the right
GtkTreeSelection object (the editor's, not the action
list's). Fixes crash upon selecting an action for a controller
event. Spotted by Alexander Rabtchevich.
svn path=/trunk/; revision=27041
2008-09-23 Sven Neumann <sven@gimp.org>
Move the "Use GEGL" check-box to the Colors menu (bug #548760):
* app/actions/Makefile.am
* app/actions/config-actions.[ch]
* app/actions/config-commands.[ch]: new files holding the
"config"
action group that includes the "use-gegl" toggle action.
* app/actions/debug-actions.c
* app/actions/debug-commands.[ch]: removed the "use-gegl"
action
here.
* app/menus/menus.c
* app/actions/actions.c: added the new action group.
* app/widgets/gimphelp-ids.h: added a help ID for the
"use-gegl"
action.
* menus/image-menu.xml.in: moved the "Use GEGL" check-box to
the
Colors menu.
svn path=/trunk/; revision=27035
2008-09-21 Sven Neumann <sven@gimp.org>
* app/actions/windows-actions.c: don't set a help ID on the
display menu items.
* app/widgets/gimphelp-ids.h: removed now unused help ID.
* app/menus/windows-menu.c: show a larger image preview in the
tooltip.
svn path=/trunk/; revision=27028
2008-09-18 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdock.c (gimp_dock_style_set): reset the RC
styles of the dock's children after parsing the RC file snippet
for them. Fixes font size for detached dockables.
svn path=/trunk/; revision=26992
2008-09-18 Sven Neumann <sven@gimp.org>
* app/widgets/gimpdock.c: made the font scale factor for the
docks
configurable in gtkrc.
* themes/Default/gtkrc
* themes/Small/gtkrc: for documentation purposes, added the
default value for GimpDock::font-scale here. Changed all style
property names to use the canonical names.
svn path=/trunk/; revision=26988
2008-09-10 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpactionview.c: factor out function that selects a
path and scrolls to that path. Keep the selected path visible if
it is still there after filtering.
svn path=/trunk/; revision=26914
* app/widgets/gimpnavigationview.c
(gimp_navigation_view_set_marker): Invalidating the view renderer
is just plain wrong, revert to redrawing the view. We will need to
solve the flicker in some other way.
svn path=/trunk/; revision=26894
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-09-05 Michael Natterer <mitch@gimp.org>
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpactioneditor.[ch]: new simple widget which
contains a GimpActionView plus the search entry.
* app/dialogs/keyboard-shortcuts-dialog.c: use the new widget
instead of implementing the search entry here.
* app/widgets/gimpcontrollereditor.c: use a GimpActionEditor
instead of GimpActionView so the actions become searchable here
too.
svn path=/trunk/; revision=26870
2008-09-04 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpactionview.[ch]: add a column for the casefold
label of the action and filter on that.
* app/dialogs/keyboard-shortcuts-dialog.c: add a button to clear
the filter entry. Changed the label to "Search:".
svn path=/trunk/; revision=26861
2008-09-04 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpactionview.[ch]: add an GtkTreeModelFilter
between the GtkTreeView and the actual GtkTreeStore. Add API to
set the filter which is simply a string that's matched with
strstr(). Quite some things improvable here...
* app/dialogs/keyboard-shortcuts-dialog.c: add a "Filter" entry
and set the filter on the action view.
svn path=/trunk/; revision=26859
2008-09-03 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpnavigationview.c
(gimp_navigation_view_motion_notify): remove the call to
gdk_window_get_pointer() again.
(gimp_navigation_view_grab_pointer): instead, grab the pointer
properly with owner_events=FALSE so all events are reported with
respect to the widget's window.
svn path=/trunk/; revision=26844
2008-09-02 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpselectiondata.c: no need to set strlen(sting)+1
bytes on the GtkSelectionData because gtk_selection_data_set()
zero-terminates all data anyway.
svn path=/trunk/; revision=26835
2008-09-02 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpselectiondata.c (gimp_selection_data_get_name):
return a const string, no need to strdup it since it's only used
temporarily in this file.
(gimp_selection_data_get_image)
(gimp_selection_data_get_component)
(gimp_selection_data_get_item)
(gimp_selection_data_get_object): changed accordingly. Move
variables to local scopes and simplify.
svn path=/trunk/; revision=26834
2008-08-28 Sven Neumann <sven@gimp.org>
* app/config/gimpguiconfig.[ch]: allow to disable the Wilber
image
shown at the top of the toolbox.
* app/widgets/gimptoolbox.c: honor the new gimprc option.
* app/config/gimprc-blurbs.h: document the old and new toolbox
preferences.
svn path=/trunk/; revision=26800
2008-08-27 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpuimanager.c (gimp_ui_manager_item_key_press):
try the find_widget_under_pointer() hack only if the menu item's
parent is really a GtkMenu (not a GtkMenuBar). Fixes crash spotted
by rubikcube.
svn path=/trunk/; revision=26796
2008-08-24 Martin Nordholts <martinn@svn.gnome.org>
* app/widgets/gimpnavigationview.c
(gimp_navigation_view_draw_marker): Use a define for border width.
svn path=/trunk/; revision=26738
2008-08-24 Martin Nordholts <martinn@svn.gnome.org>
* app/widgets/gimpnavigationview.c
(gimp_navigation_view_set_marker): Don't redraw the view, only
invalidate it. This causes the redraw to occur in an idle-handler
intead of each time this function is called, which reduces flicker
when opening new images. Stil some flicker left though...
svn path=/trunk/; revision=26737
2008-08-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimpnavigationview.c
* libgimpwidgets/gimpscrolledpreview.c: hardcode the colors to
black and white. Using theme colors doesn't make sense here.
svn path=/trunk/; revision=26719
2008-08-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimpnavigationview.c: indicate the viewport by
shading the outside region using Cairo.
svn path=/trunk/; revision=26716
2008-08-22 Martin Nordholts <martinn@svn.gnome.org>
* app/widgets/gimpnavigationview.c
(gimp_navigation_view_grab_pointer): Don't confine the cursor to
the navigation view window because that limitation only feels in
the way with overscroll.
svn path=/trunk/; revision=26714
2008-08-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimptoolbox.c: removed the "Use GEGL" check-box
from the toolbox.
* app/config/gimpcoreconfig.c: changed the default for
"use-gegl"
to FALSE (in preparation of the 2.6 release).
* app/actions/debug-commands.[ch]
* app/actions/debug-actions.c
* menus/image-menu.xml.in: added a "Use GEGL" check-box to the
Debug menu. Temporary solution until a final decision is made.
svn path=/trunk/; revision=26711
2008-08-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimpaction.c
* app/widgets/gimpdockable.c
* app/widgets/gimpradioaction.c
* app/widgets/gimpstringaction.c
* app/widgets/gimptoggleaction.c: added basic support for icon
names for actions and dockables. Uses the stock-id as icon name
if the icon theme provides an icon under this name.
* app/dialogs/dialogs.c
* app/actions/documents-actions.c
* app/actions/dialogs-actions.c: use the "document-open-recent"
icon for the document history.
svn path=/trunk/; revision=26710
2008-08-22 Martin Nordholts <martinn@svn.gnome.org>
* app/widgets/gimpnavigationview.c: Adapted to play nicely with
the overscroll feature. Basically remove limitations of the
marker, but also draw the marker frame with an inner and outer
border so it is possible to see on what side the viewport is when
zoomed out and overscrolled to the max. This is further work on
bug #362915.
svn path=/trunk/; revision=26709
2008-08-20 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpuimanager.c: reindent prototypes.
Steal find_widget_under_pointer() from gtktooltip.c
(gimp_ui_manager_item_key_press): use the function to invoke help
for the widget under the pointer if there is no selected menu
item. Makes F1 work on insensitive menu items.
svn path=/trunk/; revision=26684
2008-08-12 Sven Neumann <sven@gimp.org>
* app/widgets/gimphistogrameditor.c
(gimp_histogram_editor_frozen_update): don't do the background
histogram unless the histogram view is actually visible.
svn path=/trunk/; revision=26523
2008-08-07 Sven Neumann <sven@gimp.org>
* app/actions/layers-actions.c
* app/actions/layers-commands.[ch]: added new action
"layers-new-from-visible".
* app/widgets/gimphelp-ids.h: added new help-id.
* menus/layers-menu.xml
* menus/image-menu.xml.in: added the new action.
* app/actions/edit-actions.c: improved the blurb for
"edit-copy-visible".
svn path=/trunk/; revision=26421
2008-07-23 Sven Neumann <sven@gimp.org>
* app/widgets/gimpsessioninfo.c
(gimp_session_info_get_geometry):
don't report negative offsets, they would be interpreted
wrongly.
svn path=/trunk/; revision=26292
2008-07-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcellrendererviewable.c: no need to cast the
return value of g_value_dup_object().
svn path=/trunk/; revision=26279
2008-07-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimpsessioninfo-aux.c
(gimp_session_info_aux_new_from_props): plugged memory leak.
2008-07-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimphistogramview.c
(gimp_histogram_view_set_background): fixed refcounting issue.
This plugs the memory leak I tried to fix in
GimpHistogramEditor.
svn path=/trunk/; revision=26271
2008-07-22 Sven Neumann <sven@gimp.org>
* app/base/gimphistogram.[ch]: added new method
gimp_histogram_duplicate().
* app/widgets/gimphistogrameditor.c
(gimp_histogram_editor_frozen_update): instead of recalculating
the histogram, use a duplicate for the background histogram.
svn path=/trunk/; revision=26270
2008-07-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimphistogrameditor.c
(gimp_histogram_editor_set_image):
reverted last change, it did not plug the leak.
svn path=/trunk/; revision=26269
2008-07-21 Sven Neumann <sven@gimp.org>
* app/widgets/gimphistogrameditor.c
(gimp_histogram_editor_set_image): always unset and ref the
histograms. Plugs a memory leak reported by valgrind.
svn path=/trunk/; revision=26263
2008-07-19 Martin Nordholts <martinn@svn.gnome.org>
* app/widgets/gimpnavigationview.[ch]: Don't expose implementation
details and extend the interface with trivial new functions.
* app/display/gimpnavigationeditor.c
(gimp_navigation_editor_popup): Use the new interface instead of
directly accessing the members of the navigation view.
svn path=/trunk/; revision=26236
2008-07-14 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcontrollerkeyboard.c: changed cursor key event
prefix from "key-" to "cursor-".
* etc/controllerrc: changed accordingly. Also removed default
bindings for cursor keys without modifiers as many tools use the
cursor keys already.
svn path=/trunk/; revision=26188
2008-07-13 Sven Neumann <sven@gimp.org>
* app/widgets/Makefile.am
* app/widgets/gimpdbusservice.[ch]
* app/widgets/dbus-service.xml: removed here ...
* app/gui/Makefile.am
* app/gui/gimpdbusservice.[ch]
* app/gui/dbus-service.xml: ... and moved here.
(gimp_dbus_service_activate): raise the first display instead of
the toolbox.
* app/gui/gui-unique.c (gui_unique_win32_idle_open): same change
here, raise the display instead of the toolbox.
* app/unique.c: changed accordingly.
svn path=/trunk/; revision=26184
2008-07-12 Martin Nordholts <martinn@svn.gnome.org>
* app/core/gimpmarshal.list: Added
VOID__DOUBLE_DOUBLE_DOUBLE_DOUBLE marshaller.
* app/widgets/gimpnavigationview.c: Make the "marker-changed"
signal also pass the marker width and height as parameters.
* app/display/gimpnavigationeditor.c: Updated accordingly.
svn path=/trunk/; revision=26160
2008-07-10 Sven Neumann <sven@gimp.org>
* app/widgets/gimphelp.c: some changes to the dialog that is
shown
if the help browser is missing.
svn path=/trunk/; revision=26104
2008-07-07 Sven Neumann <sven@gimp.org>
* app/widgets/gimphelp.c (gimp_help_query_user_manual_online):
command button labels should be capitalized in header style.
svn path=/trunk/; revision=26080
2008-07-06 Sven Neumann <sven@gimp.org>
* app/widgets/gimphelp.c: if the user asks for help and the user
manual is not locally installed, show a dialog that allows to
change the preferences so that the online version is used.
svn path=/trunk/; revision=26074
2008-07-05 Sven Neumann <sven@gimp.org>
* app/dialogs/preferences-dialog.c
* app/widgets/gimphelp.[ch]: improved test for user manual
installation and moved the code out of the prefs dialog.
svn path=/trunk/; revision=26067
2008-07-04 Sven Neumann <sven@gimp.org>
* app/widgets/gimphelp.[ch]: added a function to get the
location
where the user manual is expected if it is installed locally.
* app/dialogs/preferences-dialog.c: inform the user about the
presence or absence of the user manual.
svn path=/trunk/; revision=26058
2008-07-03 Sven Neumann <sven@gimp.org>
* app/widgets/gimpsettingsbox.c (gimp_settings_box_constructor)
* app/widgets/gimpsettingseditor.c (gimp_settings_editor_constructor):
removed trailing period from tooltip texts.
* app/config/gimprc-blurbs.h: don't mark USER_MANUAL_ONLINE_BLURB
for translation, it is not used in the user interface.
svn path=/trunk/; revision=26042
2008-06-28 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpviewrendererimagefile.c
(gimp_view_renderer_imagefile_get_icon): add widget parameter so
we can get the right icon theme for the screen. If building
against GTK+ >= 2.13.4, use GFile to get proper file type icons.
(gimp_view_renderer_imagefile_render): pass the widget.
(get_icon_fallback): remove this unused function.
svn path=/trunk/; revision=26015
2008-06-28 Martin Nordholts <martinn@svn.gnome.org>
* app/widgets/gtkscalebutton.h: Remove uses of GSEAL macro to make
the thing compile on systems without bleeding edge GTK+.
svn path=/trunk/; revision=26014
2008-06-28 Michael Natterer <mitch@gimp.org>
This is completely evil:
* app/widgets/Makefile.am
* app/widgets/gimpscalebutton.[ch]: copy GtkScaleButton from GTK+
upstream trunk and hack around until symbol conflicts are gone
and it builds.
* app/widgets/gimppropwidgets.c
* app/widgets/gtkscalebutton.[ch]: use the hacked version instead
of the one from GTK+. Set the orientation to horizontal.
svn path=/trunk/; revision=26013
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-06-28 Michael Natterer <mitch@gimp.org>
* app/widgets/gimplanguagestore-parser.c: include
"libgimpbase/gimpbase.h" instead of "libgimpbase/gimpenv.h".
svn path=/trunk/; revision=26004
2008-06-28 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdbusservice.c: eek, include "gimpuimanager.h"
not "gimpuimanager.c".
svn path=/trunk/; revision=26003
2008-06-28 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpaction.c (gimp_action_set_proxy): simplify the
logic of setting "color" or "viewable" previews on menuitems.
svn path=/trunk/; revision=25999
2008-06-26 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpscalebutton.c (gimp_scale_button_init): hide the
popup's plus and minus buttons, they are completely pointless.
svn path=/trunk/; revision=25993
2008-06-25 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsettingsbox.c: make sure the file dialog goes
away when the settings box' toplevel is hidden. Set the
alternative button order on the file dialog.
svn path=/trunk/; revision=25992
2008-06-25 Michael Natterer <mitch@gimp.org>
* app/core/gimpmarshal.list: add marshaller BOOLEAN__STRING for
the change below.
* app/widgets/gimpsettingsbox.[ch]: add the import/export dialogs
here. Add a bunch of parameters to new() to be used by the
dialogs, they are not properties yet. Changed import() and
export() signals to pass the selected filename and return a
boolean indicating success.
* app/tools/gimpimagemaptool-settings.c: remove the dialog code
here and connect the import/export functions directly to above
GimpSettingsBox signals.
* app/tools/gimpimagemaptool.[ch]: remove file dialog member.
svn path=/trunk/; revision=25991
2008-06-25 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsettingseditor.c
(gimp_settings_editor_delete_clicked): select a neighboring item
after deleting the selected one.
svn path=/trunk/; revision=25986
2008-06-25 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsettingseditor.[ch]: add dummy import and export
buttons, give the list a minimum size.
* app/widgets/gimpsettingsbox.c: use the correct dialog border.
svn path=/trunk/; revision=25985
2008-06-25 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsettingsbox.c (gimp_settings_box_constructor):
tweak buttons to look the same and have no spacing between them.
svn path=/trunk/; revision=25984
2008-06-25 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsettingsbox.c (gimp_settings_box_constructor):
move "Add to favorites" out of the menu into a small button
showing a '+' icon. Add a separator between the import/export and
the manage menu items.
svn path=/trunk/; revision=25983
2008-06-24 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsettingseditor.[ch]: enable renaming the
settings objects by editing them directly in the list (renaming a
recent setting moves it to the favorites section). Enable deleting
settings. None of these changes is saved yet (need to trigger a
save by confirming the tool or storing the current settings as
favorite).
svn path=/trunk/; revision=25982
2008-06-24 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcontainercombobox.[ch]: made the model column
enum public and namespaced it.
* app/widgets/gimpsettingsbox.c: use the enum value instead of a
magic number.
* app/widgets/gimpsettingseditor.c: add a separator between
recently used settings and favorites.
svn path=/trunk/; revision=25979
2008-06-22 Michael Natterer <mitch@gimp.org>
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpsettingseditor.[ch]: skeleton of a widget to
manage the list of saved settings for the image map tools. Does
absolutely nothing yet apart from displaying the list of settings.
* app/widgets/gimpsettingsbox.[ch]: add "Manage Settings" menu item
and show a dialog containing the new widget.
svn path=/trunk/; revision=25977
2008-06-13 Michael Natterer <mitch@gimp.org>
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpsettingsbox.[ch]: new widget containing the
combo and menu button for the image map tool settings plus most of
their logic. Has "import" and "export" signals that might go away
if I figure a way to nicely abstract that. Contains some minor
bugfixes and cosmetic improvements compared to the old code.
* app/tools/gimpimagemaptool.[ch]
* app/tools/gimpimagemaptool-settings.[ch]: changed accordingly,
mostly removal of lots of code that is now in the widget.
svn path=/trunk/; revision=25943
2008-06-12 Sven Neumann <sven@gimp.org>
Added basic support for using the online user manual:
* app/widgets/gimphelp.c
* plug-ins/help/gimphelp.c: moved some help logic to the core.
The
default help domain is now constructed in the core and passed to
the help plug-ins just like the plug-in help domains.
* app/config/Makefile.am
* app/config/gimprc-blurbs.h
* app/config/gimpguiconfig.[ch]: added gimprc properties to
specify the location of the online user manual and to decide if
it
should be used instead of a locally installed copy.
svn path=/trunk/; revision=25938
2008-06-10 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpthumbbox.c (gimp_thumb_box_new): don't set a
width request on the info label. It broke horizontal label
positioning and didn't serve any purpose I can remember.
svn path=/trunk/; revision=25911
2008-06-03 Sven Neumann <sven@gimp.org>
* app/widgets/widgets-enums.[ch]: changed descriptions for
GimpHistogramScale enum.
* app/tools/gimpimagemaptool.[ch]
* app/tools/gimpimagemaptool-settings.c: added a GtkSizeGroup for
aligning with the "Presets" label. Added an accessor for the
dialog's vbox.
* app/tools/gimpbrightnesscontrasttool.c
* app/tools/gimpcolorbalancetool.c
* app/tools/gimpcolorizetool.c
* app/tools/gimpcurvestool.c
* app/tools/gimpdesaturatetool.c
* app/tools/gimpgegltool.c
* app/tools/gimphuesaturationtool.c
* app/tools/gimplevelstool.c
* app/tools/gimpposterizetool.c
* app/tools/gimpthresholdtool.c: use the new accessor. Minor
dialog cleanups in a few places.
svn path=/trunk/; revision=25884
2008-05-27 Sven Neumann <sven@gimp.org>
* app/widgets/gimpscalebutton.c (gimp_scale_button_image_expose):
rotated the button graphics and fixed it for 'right-to-left'
rendering.
svn path=/trunk/; revision=25825
2008-05-26 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpscalebutton.c (gimp_scale_button_new): use
GTK_ICON_SIZE_MENU for the scale button.
svn path=/trunk/; revision=25817
2008-05-26 Sven Neumann <sven@gimp.org>
* app/widgets/gimppropwidgets.c
* app/widgets/gimpscalebutton.[ch]: some fiddling to get the step
and page sizes right.
svn path=/trunk/; revision=25810
2008-05-24 Martin Nordholts <martinn@svn.gnome.org>
Kill the Polygon Select Tool. The Free Select Tool now provides a
superset of the old Polygon Select Tool functionality. We still
keep the tool icons etc around though, they might come in useful
in the future.
* app/tools/gimppolygonselecttool.[ch]: Removed.
* app/tools/Makefile.am: Removed gimppolygonselecttool.[ch].
* app/tools/gimp-tools.c (gimp_tools_init): Don't register the
Polygon Select Tool.
* app/widgets/gimphelp-ids.h: Remove
GIMP_HELP_TOOL_POLYGON_SELECT.
svn path=/trunk/; revision=25783
2008-05-21 Sven Neumann <sven@gimp.org>
Add Desaturate as an image-map tool with live preview (bug #533808):
* app/gegl/Makefile.am
* app/gegl/gegl-types.h
* app/gegl/gimpdesaturateconfig.[ch]: added config object for the
desaturate point filter.
* app/gegl/gimpoperationdesaturate.[ch]: derive from
GimpOperationPointFilter. Unrolled the inner loop.
* app/core/gimpdrawable-desaturate.c: changed accordingly.
* app/tools/Makefile.am
* app/tools/gimpdesaturatetool.[ch]: added desaturate as an
imagemap tool. So far only the GEGL code path is implemented.
* app/tools/gimp-tools.c: register the new tool.
* app/dialogs/dialogs.c: register the new tool dialog.
* app/dialogs/Makefile.am
* app/dialogs/desaturate-dialog.[ch]: removed the desaturate dialog.
* app/actions/drawable-actions.c
* app/actions/drawable-commands.[ch]: removed action
"drawable-desaturate".
* app/widgets/gimphelp-ids.h: changed help IDs accordingly.
* menus/image-menu.xml.in: replaced "drawable-desaturate" with
"tools-desaturate".
* libgimpwidgets/gimpstock.h: added a define for
GIMP_STOCK_TOOL_DESATURATE.
svn path=/trunk/; revision=25726
2008-05-20 Sven Neumann <sven@gimp.org>
* app/widgets/Makefile.am
* app/widgets/gimptoggleaction.[ch]
* app/widgets/gimpradioaction.[ch]: added new action types derived
from GtkToggleAction and GtkRadioAction. These types override the
"connect_proxy" method to enable tooltips in menus.
* app/widgets/gimpactiongroup.c: use the new action types.
* app/actions/dockable-actions.c: added a tooltip for the
"dockable-lock-tab" action.
svn path=/trunk/; revision=25717
2008-05-19 Sven Neumann <sven@gimp.org>
* app/widgets/gimpdockable.[ch]
* app/widgets/gimpdockbook.[ch]: added a "locked" propery to
GimpDockable. A locked dockable cannot be moved by drag-n-drop.
Allows users to protect their dockables from accidental changes,
mainly when working with a tablet.
* app/widgets/gimpsessioninfo-dockable.[ch]: store the "locked"
property in the session info.
* app/actions/dockable-actions.c
* app/actions/dockable-commands.[ch]: added an action for
toggling
the "locked" state.
* app/widgets/gimphelp-ids.h: new help-id "gimp-dock-tab-lock".
* menus/dockable-menu.xml.in: show the new menu item.
* app/actions/plug-in-actions.c: formatting.
svn path=/trunk/; revision=25715
2008-05-18 Michael Natterer <mitch@gimp.org>
* app/core/gimpstrokeoptions.[ch]: renamed public function
set_dash_pattern() to take_dash_pattern() to clarify memory
management of the passed GArray.
* app/widgets/gimpdasheditor.c
* app/widgets/gimpstrokeeditor.c: changed accordingly.
svn path=/trunk/; revision=25700
2008-05-17 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpwidgets-constructors.[ch]: add new function
gimp_stock_button_new() which creates a button with icon and label
which is *not* the stock_id's label.
* app/dialogs/preferences-dialog.c (prefs_button_add)
* app/tools/gimplevelstool.c (gimp_levels_tool_dialog): use it.
svn path=/trunk/; revision=25688
2008-05-17 Michael Natterer <mitch@gimp.org>
* app/widgets/gimphelp-ids.h: add help IDs for the stuff in the
Windows menu.
* app/actions/windows-actions.c: use them.
svn path=/trunk/; revision=25687
2008-05-17 Michael Natterer <mitch@gimp.org>
* app/actions/windows-actions.c: add tooltips to the menu items of
open and recently closed docks.
* app/widgets/gimpaction.c: connect to "notify::tooltip" and make
sure gimp_help_set_help_data() gets called when the action's
tooltip changes.
svn path=/trunk/; revision=25684
2008-05-16 Michael Natterer <mitch@gimp.org>
Implement the presistent menu of recently closed docks, still
somewhat hackish but fully functional. Fixes bug #132744.
* app/actions/dialogs-actions.c
* app/actions/dialogs-commands.[ch]
* menus/image-menu.xml.in: remove the menu items that were
creating the hardcoded preconfigured docks.
* app/dialogs/dialogs.[ch]: add GimpContainer of recently closed
docks and API to load and save it.
* app/gui/session.c: call the recent dock load and save functions.
* app/widgets/gimpsessioninfo.[ch]: implement the GimpConfig interface
and (de)serialize via proper interface methods.
* app/gui/session.c
* app/widgets/gimpdialogfactory.c: use the GimpConfig API
to (de)serialize session infos and added the code that was
formerly in the info's (de)serialize functions but didn't belong
there.
* app/widgets/gimpaction.[ch]: add "max-width-chars" property and
set it on proxy menu item labels.
* app/actions/windows-actions.[ch]
* app/actions/windows-commands.[ch]
* app/menus/windows-menu.c: add actions and menu of recently
closed docks and code to restore the dock when the menu items are
selected. Use above new action property to ensure a minimum
width of the menu.
* app/widgets/gimpmenudock.c: use '-' instead of '|' for
separating notebooks in the window title. Menu items don't like '|'.
* app/widgets/gimpdock.c: removed the confirmation dialog when
closing docks and simply add them to the recent docks container.
This code is totally misplaced and will move to another file soon.
svn path=/trunk/; revision=25671
2008-05-14 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcurveview.c (gimp_curve_view_motion_notify):
fixed use of uninitialized value.
svn path=/trunk/; revision=25668
2008-05-14 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsessioninfo-book.[ch]: remove widget member from
struct GimpSessionInfoBook. Return the created GimpDockbook from
restore().
* app/widgets/gimpsessioninfo-dock.c (restore): use the returned
book instead of the struct member.
svn path=/trunk/; revision=25658
2008-05-14 Michael Natterer <mitch@gimp.org>
Made session info serialization independent from widgets so it can
be used on stored dock layouts which are not open:
* app/widgets/gimpsessioninfo-book.[ch]
* app/widgets/gimpsessioninfo-dock.[ch]
* app/widgets/gimpsessioninfo-dockable.[ch]: add from_widget()
functions which return newly allocated session info structs.
Changed serialize() functions to take these structs instead of
widgets. Changed deserialize() functions to return the structs
instead of appending them to lists in their parent structs. Don't
free anything in restore().
* app/widgets/gimpsessioninfo-aux.[ch]
(gimp_session_info_aux_serialize): take a GList of aux_info
instead of a widget.
* app/widgets/gimpsessioninfo.[ch]: add new functions get_info()
which collects above session info details from dialogs and
clear_info() which clears that info. Call clear_info() from
finalize(). Don't free anything in restore().
* app/widgets/gimpdialogfactory.c
(gimp_dialog_factories_save_foreach): collect the session info
detials from the dialogs before serializing because serialize()
doesn't know about the widget any longer. Clear the infos after
serializing.
(gimp_dialog_factories_restore_foreach): clear the session info
details after creating the dialogs because restore() doesn't clear
the info by itself any longer.
svn path=/trunk/; revision=25657
2008-05-12 Simon Budig <simon@gimp.org>
* app/vectors/gimpvectors.[ch]
* app/vectors/gimpstroke.[ch]
* app/vectors/gimpbezierstroke.c: Implement functionality to
get a bezier description a la moveto/curveto/closepath.
* app/vectors/vectors-types.h: implement an evil hack to avoid
the inclusion of cairo.h in most C files...
* app/vectors/Makefile.am: link against cairo
* app/widgets/gimpviewrenderervectors.c: use the new functionality
for preview rendering.
svn path=/trunk/; revision=25645
2008-05-11 Sven Neumann <sven@gimp.org>
* app/core/gimpcurve.[ch]: renamed gimp_curve_map() to
gimp_curve_map_value(). Added new function
gimp_curve_map_pixels()
which will allow for better optimization.
* app/gegl/gimpoperationcurves.c
(gimp_operation_curves_process):
use gimp_curve_map_pixels().
* app/tools/gimpcurvestool.c
* app/widgets/gimpcurveview.c: follow API change.
svn path=/trunk/; revision=25641
2008-05-11 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpaction.[ch]: add an "ellipsize" property that is
applied to all proxy menu items' labels.
* app/actions/windows-actions.c: set the dock actions to
PANGO_ELLIPSIZE_END because their labels can be insanely long.
svn path=/trunk/; revision=25635
2008-05-10 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdialogfactory.[ch]: add signals "dock-added" and
"dock-removed".
(gimp_dialog_factory_add_dialog)
(gimp_dialog_factory_remove_dialog): emit them when docks get
added and removed.
svn path=/trunk/; revision=25629
2008-05-10 Sven Neumann <sven@gimp.org>
* app/widgets/gimpviewrenderer.c (gimp_view_renderer_real_draw):
reset the translation on the cairo context. Resurrects brush
emblems which were drawn in the wrong position.
* app/widgets/gimpviewrendererbrush.c
(gimp_view_renderer_brush_draw):
formatting.
svn path=/trunk/; revision=25614
2008-05-08 Sven Neumann <sven@gimp.org>
* app/display/gimpdisplayshell-callbacks.c
(gimp_display_shell_events): move the focus to the canvas on
button-press events.
* app/widgets/gimpwindow.c (gimp_window_key_press_event):
removed
a use of G_UNLIKELY() that is somewhat bogus here.
svn path=/trunk/; revision=25587
2008-05-08 Sven Neumann <sven@gimp.org>
* app/widgets/gimpfiledialog.[ch]: added infrastructure to
access
and set some state information of the GtkFileChooser.
* app/dialogs/file-open-dialog.c
* app/dialogs/file-save-dialog.c: don't keep the file-chooser
dialogs around. Instead keep the state attached to the Gimp
object
(one state for load, one for save dialogs). Closes bug #528811.
svn path=/trunk/; revision=25586
2008-04-28 Sven Neumann <sven@gimp.org>
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpwindow.[ch]: added GimpWindow class and moved
key-press-event handler from GimpDock to this class.
* app/widgets/gimpdock.[ch]:
* app/display/gimpdisplayshell.[ch]: derive from GimpWindow.
svn path=/trunk/; revision=25541
2008-04-25 Sven Neumann <sven@gimp.org>
* app/widgets/gimptoolbox.c: do not any longer accept
middle-mouse-button paste on the toolbox buttons but use the
toolbox drop area for that.
svn path=/trunk/; revision=25521
2008-04-13 Sven Neumann <sven@gimp.org>
* app/widgets/gimpunitcombobox.c: added "label-scale" style
property.
* app/display/gimpscalecombobox.[ch]: ditto. Also removed the
support for extra action items.
* app/display/gimpstatusbar.c: changed accordingly.
* themes/Default/gtkrc
* themes/Small/gtkrc: use a smaller font for the combo-box
labels
in the statusbar.
svn path=/trunk/; revision=25475
2008-04-12 Martin Nordholts <martinn@svn.gnome.org>
Applied modified patch from Daniel Hornung that changes the mouse
cursor to a "clicking will create a selection"-icon when hovering
the center of a pending Scissors Select Tool selection (bug #493370)
* app/tools/gimpiscissorstool.c
(gimp_iscissors_tool_cursor_update): Use the new cursor icon.
* cursors/modifier-select.png
* cursors/xbm/modifier-select.xbm
* cursors/xbm/modifier-select-mask.xbm: New cursor icon.
* cursors/makefile.msc
* cursors/Makefile.am
* app/widgets/gimpcursor.c
* app/widgets/widgets-enums.h: Changed accordingly.
svn path=/trunk/; revision=25473
2008-04-10 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcomponenteditor.c: implement
GimpDocked::set_context() and set the GimpViewRenderers'
contexts. Unclear how this could have been missed since it
warned badly about NULL contexts.
svn path=/trunk/; revision=25460
2008-04-09 Sven Neumann <sven@gimp.org>
* app/widgets/gimptexteditor.c (gimp_text_editor_new): disabled
the language entry until it works.
svn path=/trunk/; revision=25432
2008-04-09 Sven Neumann <sven@gimp.org>
* app/core/gimpcontainer.[ch]: added new methods
gimp_container_get_{first,last}_child().
* app/actions/file-actions.c (file_actions_close_all_update)
* app/dialogs/layer-add-mask-dialog.c (layer_add_mask_dialog_new)
* app/dialogs/palette-import-dialog.c (palette_import_image_callback)
* app/gui/gui-vtable.c (gui_get_empty_display):
* app/widgets/gimpmenudock.c (gimp_menu_dock_image_changed): use
the new GimpContainer methods.
* app/core/gimpundostack.c: use the new GimpContainer methods and
cleaned up the code.
svn path=/trunk/; revision=25426
2008-04-08 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdialogfactory.c
(gimp_dialog_factory_set_user_pos): set GDK_HINT_MIN_SIZE on
dialogs which had no previous sessionrc entry. Fixes the minimum
size of the very first empty display of a new GIMP installation
and shouldn't have any ill effects on other windows.
svn path=/trunk/; revision=25409
2008-03-31 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpbrusheditor.c (gimp_brush_editor_notify_brush):
Add missing code for the "spacing" property. Spotted by Jerry Baker.
svn path=/trunk/; revision=25323
2008-03-30 Martin Nordholts <martinn@svn.gnome.org>
* app/widgets/gimpcontainertreeview-dnd.c
(gimp_container_tree_view_drag_drop): Make all code paths result
in a call to gtk_drag_finish() if we return TRUE. Fixes bug
#317992.
svn path=/trunk/; revision=25320
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
2008-03-29 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpmenudock.c (gimp_menu_dock_auto_clicked): when
the "Auto" button gets enabled, always copy both display and image
to the local context (because there can be displays without image
now).
svn path=/trunk/; revision=25306
2008-03-27 Sven Neumann <sven@gimp.org>
* app/widgets/gimpdockable.c (gimp_dockable_detach): open the new
dock window at the mouse pointer position.
svn path=/trunk/; revision=25262
2008-03-26 Michael Natterer <mitch@gimp.org>
* app/widgets/gimptoolbox.[ch]: store the toolbox area's vbox in
the widget struct.
* app/widgets/gimptoolbox-dnd.c (gimp_toolbox_dnd_init): use it as
DND target instead of the wbox with the tool buttons.
svn path=/trunk/; revision=25250
2008-03-26 Michael Natterer <mitch@gimp.org>
* app/widgets/gimptoolbox.[ch]: big wilber is watching you from
the toolbox! Removed forgotten menubar cruft.
svn path=/trunk/; revision=25249
2008-03-26 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcairo-wilber.c: include a better Wilber path,
thanks to Jimmac.
* app/display/gimpcanvas.c (gimp_canvas_draw_drop_zone): undid
scaling "fix", instead take the offset into account. Draw with
transparency.
svn path=/trunk/; revision=25246
2008-03-26 Sven Neumann <sven@gimp.org>
* app/widgets/Makefile.am
* app/widgets/gimpcairo-wilber.[ch]: new files that renders a
Wilber image as a Cairo path. Or at least it is supposed to do
this at some point...
* app/display/gimpcanvas.c (gimp_canvas_draw_drop_zone): use the
scalable Wilber path. Needs more work...
svn path=/trunk/; revision=25244
2008-03-25 Sven Neumann <sven@gimp.org>
* app/gui/gui.c (gui_restore_after_callback): focus the image
window after all docks have been created.
* app/widgets/gimpdock.c (gimp_dock_init): unset focus-on-map on
all dock windows.
* app/widgets/gimpdialogfactory.c
(gimp_dialog_factories_show_foreach): removed the focus hacks here
as they are not any longer needed.
svn path=/trunk/; revision=25216
2008-03-24 Sven Neumann <sven@gimp.org>
* libgimpthumb/gimpthumbnail.c: don't reset the mime-type info
when we can't load a thumbnail.
* app/core/gimpimagefile.c (gimp_imagefile_get_new_pixbuf):
don't
set a stock-id depending on the state.
* app/widgets/gimpviewrendererimagefile.[ch]: removed commented
out hack that used to access semi-private API from
GtkFilesystem.
Instead lifted some code from GtkRecentManager that looks up
icons
by mime-type.
svn path=/trunk/; revision=25195
2008-03-23 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdialogfactory.c (gimp_dialog_factory_add_dialog):
don't set the dialog's window geometry if it is already visible.
Fixes empty display moving and shouldn't affect anything else
since we always want to position dialogs before they are shown.
svn path=/trunk/; revision=25184
2008-03-23 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdialogfactory.c: cleanup (move variables to
local scopes), improve debugging outout.
(gimp_dialog_factory_remove_dialog): disconnect signal handlers
and unset any session management data which is attached to the
widget, so this function can really be used to remove a dialog
from the factory.
svn path=/trunk/; revision=25176
2008-03-23 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsessioninfo.c (gimp_session_info_get_geometry):
use gdk_drawable_get_size() instead of looking at
widget->allocation since the latter is not yet updated if this
function is called from the dialog factory's "configure-event"
callback. Fixes remembering of dialog sizes within one session.
svn path=/trunk/; revision=25175
2008-03-22 Sven Neumann <sven@gimp.org>
* themes/Default/gtkrc
* app/widgets/gimpmenudock.c: reduced minimum dock width to 200
pixels.
* etc/sessionrc: use -0 instead of -1, just like in X geometry
strings. Changed default dock sizes to be taller but less wide.
* app/widgets/gimpsessioninfo.c: changed code to parse -0 from
the
sessionrc file and to deal more correctly with negative offsets.
svn path=/trunk/; revision=25169
2008-03-22 Sven Neumann <sven@gimp.org>
* app/widgets/gimpsessioninfo.c
(gimp_session_info_set_geometry):
deal with negative positions read from the sessionrc file and
interpret them as a hint to align the window with the right,
respective bottom edge of the screen.
* etc/sessionrc: position the toolbox in the upper left, the
additional dock in the upper right corner of the screen.
svn path=/trunk/; revision=25167
2008-03-21 Michael Natterer <mitch@gimp.org>
Remove the toolbox menu:
* configure.in: remove --enable-toolbox-menu option.
* menus/Makefile.am
* menus/toolbox-menu.xml.in: removed.
* menus/image-menu.xml.in: add the debug menu here.
* menus/menus.xsl: remove transformations depending on whether
there is a toolbox menu or not.
* app/menus/Makefile.am
* app/menus/toolbox-menu.[ch]: removed.
* app/menus/menus.c: remove the toolbox menu but keep the
<Toolbox> UI manager around so we can configure its actions
separate from normal docks.
* app/actions/image-actions.c (image_actions): remove the action
for the toolbox menubar.
* app/widgets/gimptoolbox.c: remove all menu code.
* app/plug-in/plug-in-menu-path.c: map plug-in registered toolbox
menu items to their new location in the image menu
unconditionally.
* plug-ins/common/screenshot.c
* plug-ins/common/uniteditor.c
* plug-ins/script-fu/script-fu.c
* plug-ins/script-fu/scripts/web-browser.scm
* plug-ins/twain/twain.c
* plug-ins/winsnap/winsnap.c: remove menu registrations under
<Toolbox>/File and change <Toolbox>/Help to <Image>/Help. Leave
<Toolbox>/Xtns untouched until its final location and name are
decided.
svn path=/trunk/; revision=25156
2008-03-21 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdock.h (struct GimpDock): added member "ID"
for themeing.
* app/widgets/gimpdock.c (gimp_dock_init): assign unique IDs
and set unique widget names based on the ID.
(gimp_dock_style_set): set individual styles for each dock based
on the widget name so docks on different screens get the correct
font size. Use PANGO_SCALE_SMALL instead of a hardcoded factor of
0.8.
svn path=/trunk/; revision=25152
2008-03-21 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpdock.c (gimp_dock_style_set): some experimental
and pretty evil code which reduces the font size in docks by 20%.
svn path=/trunk/; revision=25150
2008-03-20 Sven Neumann <sven@gimp.org>
* app/config/gimpguiconfig.c: changed default values for
"toolbox-window-hint" and "dock-window-hint" to "utility".
* app/widgets/gimptoolbox.c (gimp_toolbox_new): changed window
title to "Toolbox".
svn path=/trunk/; revision=25142
2008-03-19 Sven Neumann <sven@gimp.org>
* app/widgets/gimpdockable.c
* app/widgets/gimpwidgets-utils.[ch]: moved utility function for
setting attributes on a PangoLayout out of gimpdockable.c.
* app/display/gimpcanvas.c (gimp_canvas_draw_drop_zone): use a
bold font and paint the layout with transparency.
svn path=/trunk/; revision=25116
2008-03-10 Sven Neumann <sven@gimp.org>
* app/widgets/gimpdockable.[ch]
* app/widgets/gimpdockbook.c: moved code for the drag widget to
GimpDockable. Use semi-bold text for the drag widget also.
svn path=/trunk/; revision=25082
2008-03-09 Michael Natterer <mitch@gimp.org>
* app/tools/Makefile.am
* app/tools/gimpiscissorsoptions.[ch]
* app/tools/gimpregionselectoptions.[ch]: new options classes.
* app/tools/gimpselectionoptions.[ch]: remove the options here.
Also remove some leftover rectangle options cruft that is in its
own files since long ago.
* app/tools/gimpbycolorselecttool.c
* app/tools/gimpfuzzyselecttool.c
* app/tools/gimpiscissorstool.[ch]
* app/tools/gimpregionselecttool.[ch]
* app/widgets/gimpselectioneditor.c: changed accordingly.
svn path=/trunk/; revision=25071
2008-03-08 Sven Neumann <sven@gimp.org>
Experimental attempt to gain a little more horizontal space for
the tool options:
* app/widgets/gimptooloptionseditor.c: removed the shadow from
the
viewport and the border from the vbox.
* app/widgets/gimpdockable.c: use a semibold label for the
title.
svn path=/trunk/; revision=25065
2008-02-28 Michael Natterer <mitch@gimp.org>
* app/core/gimpcurve.[ch]: get rid of fixed-size arrays and
allocate the points and curve arrays dynamically. Added "n-points"
and "n-samples" CONSTRUCT_ONLY properties. Renamed member "curve"
to "samples". Lots of code changes to work with dynamic limits
rather than 17 and 256.
* app/core/gimpdrawable-curves.c
* app/gegl/gimpcurvesconfig.c
* app/tools/gimpcurvestool.c
* app/widgets/gimpcurveview.c: changed accordingly.
svn path=/trunk/; revision=24995
2008-02-12 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcolormapeditor.[ch]: show a hint on
non-indexed
images. Based on a patch from Olof Frahm. Closes bug #438217.
svn path=/trunk/; revision=24870
2008-02-12 Sven Neumann <sven@gimp.org>
* app/widgets/gimplanguagestore-parser.c: inverted logic; #ifdef
is IMO easier to read than #ifndef.
svn path=/trunk/; revision=24868
2008-02-12 Tor Lillqvist <tml@novell.com>
* app/widgets/gimplanguagestore-parser.c
(gimp_language_store_populate): Don't use the compile-time paths
to iso-codes on Windows. Instead assume iso-codes is installed in
the same location as GIMP. Make sure translated language names are
in UTF-8 by calling bind_textdomain_codeset().
svn path=/trunk/; revision=24867
2008-02-11 Michael Natterer <mitch@gimp.org>
* app/widgets/gimptexteditor.c (gimp_text_editor_new): enable
wrapping so the text doesn't scroll out horizontally.
svn path=/trunk/; revision=24861
2008-02-11 Michael Natterer <mitch@gimp.org>
* app/core/gimpcurve.[ch]: add gimp_curve_get_point().
* app/gegl/gimpcurvesconfig.c
* app/widgets/gimpcurveview.c: use it instead of accessing the
points array directly.
svn path=/trunk/; revision=24857
2008-02-09 Michael Natterer <mitch@gimp.org>
* app/core/gimpcurve.[ch]: keep the anchor points as an array of
GimpVector2 instead of plain doubles.
* app/gegl/gimpcurvesconfig.c
* app/widgets/gimpcurveview.c: changed accordingly.
svn path=/trunk/; revision=24842
2008-02-09 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcurveview.[ch]: port internal cursor stuff to
gdouble, fix off-by-one in curve drawing, fix drawing artefact in
handle drawing by starting drawing on the handle's outline and not
its center.
svn path=/trunk/; revision=24839
2008-02-09 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcurveview.[ch]: port the "xpos" API
to [0.0..1.0] doubles too.
* app/tools/gimpcurvestool.[ch]: rename "col_value" member to
"picked_color" and use gdouble instead of gint. Also use GimpCurve
API to map the values instead of accessing the curve directly.
Fixes setting curve anchor points by color picking.
svn path=/trunk/; revision=24838
2008-02-09 Michael Natterer <mitch@gimp.org>
* app/core/gimpcurve.[ch]: changed all values to be [0.0..1.0]
doubles instead of [0..255] integers. Also changed the API to use
doubles instead of ints. Still have the fixed-size arrays though.
(gimp_curve_map): new function to map values.
* app/gegl/gimpoperationcurves.c: remove private map() function
and use the one from GimpCurve.
* app/gegl/gimpcurvesconfig.c
* app/core/gimpdrawable-curves.c: port to the new gdouble API.
* app/tools/gimpcurvestool.c: use gimp_curve_get_uchar() to get
the arrays for the color bars.
* app/widgets/gimpcurveview.[ch]: port to gdouble and some cleanup.
svn path=/trunk/; revision=24837
2008-02-08 Sven Neumann <sven@gimp.org>
* app/widgets/gimptexteditor.c: use an entry with completion
for
language selection. Still not functional.
svn path=/trunk/; revision=24834
2008-02-08 Sven Neumann <sven@gimp.org>
* app/widgets/gimplanguagestore.[ch]
* app/widgets/gimplanguagestore-parser.c: actually populate the
language store. Still work in progress...
* app/widgets/gimptexteditor.c: added a combo-box for language
selection. Not functional yet; just something to play with.
svn path=/trunk/; revision=24833
2008-02-07 Michael Natterer <mitch@gimp.org>
* app/base/base-utils.[ch]: add get_pid() which returns getpid().
* app/base/base.c
* app/base/tile-swap.c
* app/core/gimp-utils.c
* app/plug-in/gimppluginshm.c
* app/widgets/gimpselectiondata.c
* tools/pdbgen/pdb/misc.pdb: use it instead of getpid() and remove
all the #ifdef'ed includes getpid() needs.
* tools/pdbgen/app.pl: remove support for these includes. Also
remove some perl cruft in the include handling which is not needed
any longer.
* app/pdb/misc_cmds.c: regenerated.
svn path=/trunk/; revision=24827
2008-02-06 Michael Natterer <mitch@gimp.org>
* app/tools/gimpgegltool.c (gimp_param_spec_duplicate)
* app/widgets/gimppropwidgets.c (gimp_prop_table_new): add support
for GParamSpecEnum.
* app/core/gimpimagemap.c (gimp_image_map_apply): add even better
checks for input and output pads of the passed operation.
svn path=/trunk/; revision=24824
2008-02-06 Michael Natterer <mitch@gimp.org>
* app/paint/gimpclone.c
* app/paint/gimpheal.c
* app/paint/gimpink.c
* app/widgets/gimphistogrameditor.c: remove includes that are
not needed any longer.
svn path=/trunk/; revision=24823
2008-02-06 Michael Natterer <mitch@gimp.org>
* app/tools/gimpgegltool.c (gimp_param_spec_duplicate)
* app/widgets/gimppropwidgets.c (gimp_prop_table_new): support
multiline text and file paths. The multiline support is hacked up
and needs some proper solution.
svn path=/trunk/; revision=24818
2008-02-05 Michael Natterer <mitch@gimp.org>
* app/widgets/gimppropwidgets.[ch] (gimp_prop_table_new): new
function which creates a table of prop widgets for all properties
of an object (pretty incomplete, does exactly what's needed in
GimpGeglTool, or even less).
* app/tools/gimpgegltool.c: create a proxy config class for each
GegĺOperation and create a prop table on the config class'
properties as GUI for the GEGL operation. Write the proxy object's
properties back to the GeglNode in map().
svn path=/trunk/; revision=24809
2008-02-04 Michael Natterer <mitch@gimp.org>
* app/base/gimphistogram.[ch]: add refcounting and replace free()
API by ref() and unref().
* app/core/gimpdrawable-equalize.c
* app/core/gimpdrawable-levels.c
* app/widgets/gimphistogrameditor.c
* tools/pdbgen/pdb/color.pdb: replace calls to
gimp_histogram_free() by gimp_histogram_unref().
* app/pdb/color_cmds.c: regenerated.
* app/widgets/gimphistogramview.c: reference the histograms so we
don't need the widget's users to keep them around while the widget
exists.
* app/tools/gimpcurvestool.[ch]: remove the histogram from the
tool struct and just create one locally to set it on the histogram
view widget.
Unrelated:
* app/tools/gimplevelstool.[ch]
* app/tools/gimpthresholdtool.[ch]: renamed "hist" members to
"histogram" plus some cleanup.
svn path=/trunk/; revision=24792
2008-02-01 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcontainerview.c
(gimp_container_view_set_container): refuse containers if their
children are not GimpViewables instead of crashing later.
svn path=/trunk/; revision=24769
2008-01-30 Martin Nordholts <martinn@svn.gnome.org>
Added a Polygon Select Tool which is a primitive selection tool
based on Free Hand Select. Code filtered through David Gowers who
also made the tool icon. This version of the tool is a for-now
solution to bug #119646.
* app/tools/gimppolygonselecttool.[ch]: The new tool.
* app/tools/gimp-tools.c: Add the tool.
* app/tools/Makefile.am: Add tool source.
* app/widgets/gimphelp-ids.h: Add help id for the tool.
* libgimpwidgets/gimpstock.[ch]: Setup for the new tool icon.
* menus/image-menu.xml.in: Add action entry for the tool.
* themes/Default/images/tools/stock-tool-polygon-select-{16,24}.png:
Tool icon graphics.
* themes/Default/images/Makefile.am: Add tool icon graphics.
svn path=/trunk/; revision=24753
2008-01-25 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcolormapeditor.c (gimp_colormap_editor_draw):
avoid crashing when the widget allocation is small (bug
#511926).
svn path=/trunk/; revision=24704
2008-01-21 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcolorbar.c (gimp_color_bar_class_init): fix the
ID of the "histogram-channel" property.
svn path=/trunk/; revision=24660
2008-01-10 Sven Neumann <sven@gimp.org>
* app/widgets/gimpuimanager.c (gimp_ui_manager_ui_popup):
gracefully deal with a NULL return value from
gtk_ui_manager_get_widget(). This happens when the XML menu
definitions are not found.
svn path=/trunk/; revision=24594
2008-01-04 Hans Breuer <hans@breuer.org>
**/makefile.msc app/gimpcore.def : updated so it compiles and links
(almost, see bug #507298)
svn path=/trunk/; revision=24533
2008-01-04 Michael Natterer <mitch@gimp.org>
* app/config/gimpcoreconfig.[ch]: add "use-gegl" property but
don't serialize it.
* app/widgets/gimptoolbox.c: add super ugly "Use GEGL" toggle to
the toolbox so we don't need to have prefs open all the time when
experimenting with gegl.
* app/tools/gimpimagemaptool.[ch]: remove "Use GEGL" toggle from
the tool dialogs and connect to the config property instead.
* app/core/gimpdrawable-desaturate.c
* app/core/gimpdrawable-invert.c: made them runtime-switchable by
looking at the config property.
svn path=/trunk/; revision=24530
2007-12-30 Sven Neumann <sven@gimp.org>
* app/display/gimpstatusbar.[ch]
* app/widgets/gimpprogressbox.[ch]: only update the
GtkProgressBar
if that would cause a visible change.
svn path=/trunk/; revision=24487
2007-12-28 Sven Neumann <sven@gimp.org>
* app/widgets/gimpcolormapeditor.c: don't use the render buffer.
Use a white background until this widget is rewritten.
svn path=/trunk/; revision=24455
2007-12-28 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpsamplepointeditor.c
(gimp_sample_point_editor_points_changed): fix my last commit to
this file (don't access sample points of NULL images).
svn path=/trunk/; revision=24454
2007-12-28 Sven Neumann <sven@gimp.org>
* libgimpwidgets/gimpcairo-utils.[ch]: addec const qualifiers to
GimpRGB parameters.
* app/widgets/gimprender.[ch]: removed global variables for
checkerboard colors and introduced functions to get the
checkerboard colors as pointers to GimpRGB structs.
* app/actions/view-actions.c
* app/display/gimpdisplayshell-appearance.c
* app/widgets/gimpviewrenderer.c
* app/widgets/gimpcolormapeditor.c: changed accordingly.
svn path=/trunk/; revision=24451
2007-12-28 Sven Neumann <sven@gimp.org>
* libgimpwidgets/gimpcairo-utils.[ch]: added light and dark
check
color parameters to gimp_cairo_checkerboard_create().
* libgimpwidgets/gimpcellrenderercolor.c
* app/widgets/gimpviewrenderer.c (gimp_view_renderer_real_draw):
changed accordingly.
svn path=/trunk/; revision=24450
2007-12-28 Sven Neumann <sven@gimp.org>
* app/widgets/gimpviewrenderer.c (gimp_view_renderer_real_draw):
if the surface has CAIRO_CONTENT_COLOR_ALPHA, render it on a
checkerboard background.
* app/widgets/gimpviewrenderergradient.[ch]: just draw the
gradient with alpha-transparency instead of doing the blend on
the
checkerboard here.
* app/widgets/gimpcolormapeditor.c: formatting.
svn path=/trunk/; revision=24446
2007-12-27 Sven Neumann <sven@gimp.org>
* app/widgets/gimpthumbbox.c (gimp_thumb_box_new): enable line
wrapping on the info label.
svn path=/trunk/; revision=24439
2007-12-20 Sven Neumann <sven@gimp.org>
* app/widgets/gimpprofilechooserdialog.c: added code for adding
a
shortcut to the default ICC profile location on Windows. Based
on
a patch by John Marshall (bug #503410).
svn path=/trunk/; revision=24407
2007-12-18 Sven Neumann <sven@gimp.org>
* app/widgets/gimpgradienteditor.c: don't rely on the pointer
position in the GdkEventMotion struct, query the pointer instead.
svn path=/trunk/; revision=24395
2007-12-18 Sven Neumann <sven@gimp.org>
* app/display/gimpnavigationeditor.c: minor cleanup.
* app/widgets/gimpnavigationview.c
(gimp_navigation_view_motion_notify): fixed handling of motion
events that broke when I introduced the call to
gdk_event_request_motions().
svn path=/trunk/; revision=24394