2001-05-07 Federico Mena Quintero <federico@ximian.com>
* gal/e-text/e-text.c (e_text_reflow): Request an update if just
our line widths needed recalculation. This fixes the bug where
the text item would not repaint itself if the canvas lost the
focus.
svn path=/trunk/; revision=9705
2001-04-29 Christopher James Lahey <clahey@ximian.com>
* gal/e-text/e-text.c: Made fewer calls to functions like
split_into_lines to save time when possible.
svn path=/trunk/; revision=9629
2001-04-20 Jon Trowbridge <trow@ximian.com>
* gal/e-text/e-completion-test.c: Limit total matches, for better
performance on slow machines. It is supposed to be a test, so
correctness of the completion operations isn't really a
priority...
* gal/e-text/e-completion-view.c (e_completion_view_construct):
Set GTK_CAN_FOCUS flag.
* gal/e-text/e-entry.c (e_entry_show_popup): Evil! Evil! Unclean!
Unclean! Manually check if the pointer is in the area where the
popup is going to appear, and if it is, warp the pointer out of
the way. After days of fucking around, this horrible hack is the
only way that I've been able to figure out to keep the focus from
being taken away from the entry and ending up somewhere strange
when the popup pops up. (The main problem is with the case of
focus-follows-cursor --- click-to-focus works fine. Sawfish
idiocincracies may also be causing problems, but I don't want to
unjustly accuse the WM of anything, as tempting and appealing as
that can be.)
(key_press_cb): Proxy for forwarding the popup's key press events
to the entry.
(key_release_cb): Proxy for forwarding the popup's key release
events to the entry.
These proxies should be enough to take care of my focus problems.
Unfortunately, they aren't, and the pointer-warping-focus-horror
is required for reasons that I don't fully understand.
* gal/e-text/e-text.c (_get_xy_from_position): Made
_get_xy_from_position return a boolean. It returns TRUE if the
computation was successful
(and if valid data is now in *xp and *yp), FALSE otherwise. Make
sure that text->lines is not NULL, and return FALSE if it is.
(_get_position): Test that _get_xy_from_position returns TRUE
before using the values in x and y.
(_get_position): Test that _get_xy_from_position returns TRUE
before using the values in x and y.
Garbage values being returned in passed-in pointers created a race
condition where you could hang an EText if you deleted the entire
contents of the buffer really quickly.
svn path=/trunk/; revision=9468
2001-04-16 Christopher James Lahey <clahey@ximian.com>
* gal/e-text/e-text.c (tooltip_event): Propagate the event after
sending it to the base EText.
svn path=/trunk/; revision=9379
2001-04-15 Christopher James Lahey <clahey@ximian.com>
* gal/e-text/e-text.c: Made setting the rgba color work even if
you're using the non-aa canvas (except for the a.)
svn path=/trunk/; revision=9337
2001-04-15 Christopher James Lahey <clahey@ximian.com>
* gal/e-text/e-text.c (tooltip_event): Use e_canvas_hide_tooltip
and e_canvas_popup_tooltip. Set bold on the tooltip.
* gal/widgets/e-canvas.c, gal/widgets/e-canvas.h: Added
e_canvas_popup_tooltip and e_canvas_hide_tooltip.
svn path=/trunk/; revision=9323
* tests/test-tree-3.c (INITIAL_SPEC): add a missing \
* gal/e-text/e-text.c (_get_position_from_xy): Add a "break;" to
an otherwise-empty default case to make it ANSI.
svn path=/trunk/; revision=9201
(woohoo!):
2001-04-05 Gediminas Paulauskas <menesis@delfi.lt>
* gal/widgets/e-popup-menu.c: Copied gnome_app_helper_gettext function
here, and use it for translating menu names (they are passed from app as
well as from gal in arrays with N_(), and domains differ).
svn path=/trunk/; revision=9190
2001-04-04 Christopher James Lahey <clahey@ximian.com>
* gal/e-text/e-text-model-uri.c, gal/e-text/e-text.c,
gal/e-text/e-text.h, gal/e-text/e-text-event-processor.c,
gal/util/e-xml-utils.c, gal/widgets/e-cursors.c,
gal/widgets/e-cursors.h: Fixed headers. Moved the .h associated
with each .c to the top of the list of included files.
* gal/util/e-util.h: Removed the bonobo-xobject.h header here.
* gal/util/e-xml-utils.c: Replaced strcasecmp with g_strcasecmp.
* gal/widgets/e-canvas-vbox.c: Make this work even if the item is
destroyed after the vbox.
* gal/widgets/e-categories.c (do_parse_categories): Made this
translate using e_utf8_from_locale string as it should.
svn path=/trunk/; revision=9175
* gal/widgets/e-canvas.c (e_canvas_item_grab_focus): Make this
take an extra argument saying whether or not to grab the
widget-level focus.
* gal/e-text/e-text.c (e_text_event): Update arguments to
e_canvas_item_grab_focus.
svn path=/trunk/; revision=8745
2001-03-06 Jon Trowbridge <trow@gnu.org>
* gal/e-text/e-entry.c (e_entry_text_keypress): Added. This is
part of a change of sematics that makes things much nicer for the
user --- auto-activate the completion popup only on keypresses
than also change the entry.
(e_entry_proxy_changed): Record that the underlying EText has
changed, and set up a timeout to clear the changed_since_keypress
flag in a very short amount of time.
(e_entry_init): Connect to the EText's "keypress" signal".
(e_entry_destroy): If our completion_delay_tag timeout is still
floating around out there when we are winding things down, remove
it.
* gal/e-text/e-text.c (e_text_class_init): Added keypress signal.
(e_text_text_model_reposition): Removed some old cruft.
(e_text_event): Emit our keypress signal after handling events of
type GDK_KEY_PRESS.
svn path=/trunk/; revision=8566
2001-03-05 Jon Trowbridge <trow@gnu.org>
* configure.in: Set version number to 0.5.99.5
* gal/e-text/e-entry.c (e_entry_class_init): Add a "popup" signal.
If you have trepidations about this, see the technical argument
below.
(e_entry_init): Connect to the EText's popup signal.
(e_entry_proxy_popup): Proxy emitter for popup signals from the
EText.
* gal/e-text/e-text.c (e_text_class_init): Added a "popup" signal.
(e_text_event): Emit the "popup" signal on right-clicks. Now you
could ask yourself: "should there be a signal named 'popup' in
EText that gets emitted on right-clicks?" And this is a
reasonable question, since... well, this has a funny feeling to
it. But the whole point of GNOME, or at least one of the original
points of GNOME, was to impose policy in a reasonable way when it
made sense in order to simplify the user's experience. Convention
dictates that popup menus are tied to right-clicks --- so rather
than setting up some elaborate forwarding of button-press signals,
why not just impose a little policy and set up a signal that is
closely tied to a familiar set of semantics? Maybe it isn't the
best thing to do from a aesthetics-of-the-API point of view, but I
doubt anyone could condemn it as being anything more than mostly
harmless.
svn path=/trunk/; revision=8565
2001-03-05 Christopher James Lahey <clahey@ximian.com>
* configure.in: Upped the version number to 0.5.99.4.
* gal/e-text/e-text.c (e_text_draw): Fixed a crash here.
svn path=/trunk/; revision=8556
2001-02-19 Christopher James Lahey <clahey@ximian.com>
* configure.in: Changed the version number to 0.5.99.1.
* gal/Makefile.am (libgal_la_LIBADD): Change the directories for
e-table-text-model.lo, e-text-event-processor.lo, and
e-text-event-processor-emacs-like.lo. Reordered the e-text
directory to be after the e-table directory in build order.
* gal/e-text/Makefile.am: Removed
e-text-event-processor-emacs-like.c,
e-text-event-processor-emacs-like.h,
e-text-event-processor-types.h, e-text-event-processor.c, and
e-text-event-processor.h. Added e-table-text-model.c and
e-table-text-model.h.
* gal/e-text/e-table-text-model.c: Changed the signature of these
mehtods to match the changed signature in ETextModel.
* gal/e-text/e-text-event-processor-emacs-like.c,
gal/e-text/e-text-event-processor-emacs-like.h,
gal/e-text/e-text-event-processor-types.h,
gal/e-text/e-text-event-processor.c,
gal/e-text/e-text-event-processor.h: Moved these to gal/util/.
* gal/e-text/e-text.c, gal/e-text/e-text.h: Changed the includes
to match the moved files.
* gal/util/Makefile.am: Added e-text-event-processor-emacs-like.c,
e-text-event-processor-emacs-like.h,
e-text-event-processor-types.h, e-text-event-processor.c, and
e-text-event-processor.h.
* gal/util/e-text-event-processor-emacs-like.h,
gal/util/e-text-event-processor.h: Changed the includes to match
the moved files.
2001-02-19 Christopher James Lahey <clahey@ximian.com>
* Makefile.am: Removed e-table-text-model.c and
e-table-text-model.h.
* e-table-text-model.c, e-table-text-model.h: Moved these to
gal/e-text/.
* e-cell-text.c: Changed the include line for
e-text-event-processor.h and e-text-event-processor-emacs-like.h.
svn path=/trunk/; revision=8298
2001-02-19 Jon Trowbridge <trow@ximian.com>
* gal/e-text/e-entry.c (e_entry_enable_completion_full): Added.
Allows you to attach an ECompletion to an EEntry, and have that
ECompletion be used for (obviously enough) completions.
* gal/e-text/e-completion-view.h, gal/e-text/e-completion-view.c:
Added. ECompletionView is a widget for displaying the results of
a completion request in a format that is appropriate for a
drop-down window.
* gal/e-text/e-completion.h, gal/e-text/e-completion.c: Added.
ECompletion is a "pure virtual base class" for completion-type
operations. It is implemented so that completions can be either
synchronous or asynchronous.
* gal/e-text/e-text.c: Lots of changes to accomodate the
ETextModel changes. First of all, we render embedded text objects
as being underlined. We also cause the model to emit the
appropriate object activation signal when an embedded object is
double-clicked. Also, all of the code that moves the cursor in
response to user input has been removed. Instead, the EText now
listens for "reposition" events from the underlying model, and
bases all cursor motions on those.
(get_bounds_item_relative): Fixed bug in the handling of
differently-anchored text. Being differently-anchored is not a
crime or a perversion --- it is an alternative lifestyle that we
have to respect.
* gal/e-text/e-text-model-uri.h, gal/e-text/e-text-model-uri.c: A
sample ETextModel that converts URIs into embedded objects that
get opened in the browser when you double-click them.
* gal/e-text/e-text-model-repos.h,
gal/e-text/e-text-model-repos.c: Added. A group of simple
structures & functions for handling various cursor movement rules.
These are the sorts of things that are passed as arguments to
ETextModel "reposition" event handlers.
* gal/e-text/e-text-model.h, gal/e-text/e-text-model.c: Privitized
the ETextModel struct and "methodized" all of the operations, so
that derived classes can do arbitrarily respond to get/set
requests in arbitrarily strange ways. Also added the concept of
declaring regions of the text as "embedded text objects".
Finally, caused operations that change the text to emit a
"reposition" signal that passes information that can be used by a
view (like an EText) to move the cursor or selection in an
intelligent way in response to those changes. This means that you
can now open two ETexts that look at the same ETextModel, and have
the cursor in one do the right thing when you edit the other. (As
opposed to producing a lot of potential segfaults, as it was
before.)
svn path=/trunk/; revision=8280
2001-02-07 Christopher James Lahey <clahey@ximian.com>
* gal/e-text/e-text.c, gal/e-text/e-text.h (e_text_realize): Store
the whole GdkColor instead of just the pixel.
svn path=/trunk/; revision=8063
2001-01-30 Christopher James Lahey <clahey@ximian.com>
* gal/e-text/e-entry.c (canvas_size_allocate, et_set_arg): Fixed
allocation and placement of text window.
* gal/e-text/e-text.c (e_text_draw): Fixed display of the text.
svn path=/trunk/; revision=7920
2001-01-30 Christopher James Lahey <clahey@helixcode.com>
* Reverted the latest change to EText since we're in feature freeze.
svn path=/trunk/; revision=7912
2001-01-29 Jon Trowbridge <trow@gnu.org>
* gal/e-text/e-text.c (e_text_init): Connect to the model's
"position" signal.
(e_text_init): Set default value for rgba_object as blue.
(e_text_destroy): Disconnect model position signal.
(fix_selection): Some extra sanity checking to keep the selection
from spilling outside of the bounds of the text string as it
expands or contracts. Should be obsolete due to the changes to
objectify_uris --- but I'll leave this in here for now, in an
attempt to avoid non-\0-terminated strings, segfaults, and all of
that fun stuff.
(e_text_text_model_position): Move our cursor according to the
suggestions made by our ETextModel, via the "position" signal.
(text_width_with_objects): Check that text is not NULL.
(text_draw_with_objects): Accept an extra GdkGC for use in drawing
objects.
(e_text_set_arg): Properly handle the "position" signal when
changing models.
(e_text_draw): Initialize the GC for drawing objects, if
necessary.
(_insert): Comment out the code that adjustes text->selection_*.
The cursor is now moved by the ETextModel directly via the
position signal, not by the view.
* gal/e-text/e-text-model-uri.c (objectify_uris): Add more
sophisticated uri recognition via regular expressions.
(objectify_uris): Changed to track position changes as model->text
expands and contracts along with the objects. Block the
objectification of any chunks of text that straddle our current
position.
(e_text_model_uri_set_text): Added position info to objectify_uris
call.
(e_text_model_uri_insert): Added position info to objectify_uris
call.
(e_text_model_uri_insert_length): Added position info to
objectify_uris call.
(e_text_model_uri_delete): Added position info to objectify_uris
call.
* gal/e-text/e-text-model.c (e_text_model_class_init): Added a
"position" signal that allows the ETextModel to send cursor
positioning information back to any view. We need this for text
with objects, where the text string can grow and shrink in ways
that the view doesn't expect.
(e_text_model_real_insert): Added sanity checking of args and a
position emission.
(e_text_model_real_insert_length): Added sanity checking of args
and a position emission.
(e_text_model_real_delete): Added sanity checking of args.
(e_text_model_suggest_position): A wrapper around the "position"
signal emitter.
svn path=/trunk/; revision=7894
2001-01-26 Jon Trowbridge <trow@gnu.org>
* gal/e-text/e-text-model-test.c: Added; a new test program that
demonstrates objects in ETexts.
* gal/e-text/e-text-model-uri.c: Added; a text model that converts
URIs in the text into objects that are passed off to the GNOME URI
handler when activated. This is actually still extremely broken;
I got it just working enough to test out my EText changes.
* gal/e-text/e-text.c: A whole lot of changes, designed to make
ETextModel objects render properly. The basic idea of the changes
is pretty simple, though.
(text_width_with_objects): First of all, this function is an
alternative to e_font_utf8_text_width that takes into the account
the embedded \1s in the text string and properly accounts for the
width of the object strings.
(unicode_strlen_with_objects): Next, this function finds the
proper strlen of a string, expanding the \1s.
(text_draw_with_objects): Finally, this is just a replacement for
e_font_draw_utf8_text that does the right thing for objects. I've
gone through all of e-text.c and replace calls by those original
functions with my new object-enabled alternatives.
(split_into_lines): Some tweaking to get line breaking to work
properly. Made \1 into a "break character", so that we can break
lines between multiple adjacent objects. (Which seemed like the
right thing to do, but there may be cases where that is
undesireable.)
(_get_position_from_xy): Fixed to properly handle embedded
objects, and to get the right selection semantics for objects.
(Or at least semantics that feel right to me.) Also fixed a bug
that caused selection, etc. to not work properly if the text was
anchored anywhere other than with GTK_ANCHOR_NORTH*.
(_get_position): Hacked to cause objects to activate when they are
double-clicked. There is probably a better way to do this.
* gal/e-text/e-text-model.c (e_text_model_real_object_count):
Provide a default implementation of an object counter. Derived
classes might want to override this for efficiency reasons.
(e_text_model_strdup_expanded_text): Added. Allocates and returns
a string contains the model's text with the objects "expanded"
within.
* gal/e-text/e-text-model.h: Added obj_count, get_nth_obj, and
activate_nth_obj virtual methods to ETextModelClass.
svn path=/trunk/; revision=7842
2001-01-18 Christopher James Lahey <clahey@helixcode.com>
* gal/e-text/e-text.c (_do_tooltip): Make tooltip appear properly
even if anchor is set.
svn path=/trunk/; revision=7620
2001-01-16 Jason Leach <jasonleach@usa.net>
* gal/e-text/e-text.c (e_text_set_arg): Emit a "changed" signal to
the EText after we gtk_object_set a "model" arg and fill the EText
with text from the model, which obviously changes the text.
svn path=/trunk/; revision=7530
2000-12-26 Christopher James Lahey <clahey@helixcode.com>
* gal/e-text/e-entry.c: Added a "draw_background" argument. Set
the default for the "draw_background" argument to the contained
EText to TRUE.
* gal/e-text/e-text.c: Changed the default for the
"draw_background" argument to FALSE.
svn path=/trunk/; revision=7176
2000-12-25 Miguel de Icaza <miguel@helixcode.com>
* gal/e-text/e-text.c (e_text_init): Always have some text. Fixes crash.
svn path=/trunk/; revision=7171
2000-12-25 Miguel de Icaza <miguel@helixcode.com>
* gal/e-text/e-text.c (e_text_draw): Made the code CanvasItem
correct: the code should not draw at arbitrary positions in the
GdkWindow, it should instead draw from item->x1, item->y1 to
item->y1, item->y2 (Chris, we need to talk about this, I think my
current fix is passable, but might not be fully correct.
Specially the interpretation of the width, height arguments).
(e_text_class_init): Fix name.
(e_text_set_arg): Use correct name.
svn path=/trunk/; revision=7163
2000-12-13 Christopher James Lahey <clahey@helixcode.com>
* gal/e-text/e-text.c (_do_tooltip): Changed the color from yellow
to light gray.
* gal/widgets/e-canvas-vbox.c (e_canvas_vbox_event): Made it so
that e-canvas-vbox doesn't eat all the keyboard events. This
means widget navigation keys work properly.
svn path=/trunk/; revision=6989
2000-10-07 Damon Chaplin <damon@helixcode.com>
* gal/e-text/e-text.c (e_text_unrealize): set cursors to NULL after
destroying them, to avoid any possibility of BadCursor.
(e_text_event): just return if the EText item is destroyed.
svn path=/trunk/; revision=5780
2000-08-02 Christopher James Lahey <clahey@helixcode.com>
* widgets/e-text/e-text.c: Made clicking choose the right
character even if show_borders is on.
svn path=/trunk/; revision=4492
2000-07-21 Christopher James Lahey <clahey@helixcode.com>
* widgets/e-text/e-text.c: Made focus in not change your selection
position.
svn path=/trunk/; revision=4268
2000-07-09 Christopher James Lahey <clahey@helixcode.com>
* widgets/e-text/e-text.c: Don't draw quite as large a "flat_box".
If draw_borders is TRUE, cause the cursor to change even if not
editing.
svn path=/trunk/; revision=4017