613 Commits

Author SHA1 Message Date
Nick Treleaven
e1988964c1 Fix Windows build 2014-08-01 12:05:30 +01:00
Nick Treleaven
01b3103eaf Remove unread variable 2014-08-01 11:54:05 +01:00
Colomban Wendling
b65f49902f Fix closing the documents when quitting
When quitting we avoid doing some unnecessary actions, and used to
simply destroy the Scintilla widget (and thus the notebook page)
instead of the elaborate UI updates.

Unfortunately, when the infobars landed they changed what is packed as
a notebook page, and now destroying the Scintilla widget alone is not
enough to close the page.  Fix this by properly removing the whole page
no matter what it contains.

This issue was visible when quitting Geany with a project open.
2014-07-26 15:03:49 +02:00
Colomban Wendling
0682a25585 Fix crash when quitting with an infobar visible
When the infobar gets closed/destroyed it tries to focus the possibly
destroyed document, leading to a crash.
2014-07-26 13:36:19 +02:00
Thomas Martitz
ffcec43d01 document.c: Immediately mark as changed when document is externally deleted
Before infobar it didn't matter because the dialog was modal and interaction
with the doc was impossible. Now that you can interact it the doc should
be marked changed immediately.
2014-06-29 11:38:02 +02:00
Thomas Martitz
0f7db113e7 document.c: Restore lost document_set_text_changed(doc, TRUE) call
It got lost by accident in 5117940.
2014-06-29 11:38:02 +02:00
Thomas Martitz
c8970e2331 info bars: Show additional save button for the "reload file?" info bar
This allows overwriting the file right from the info bar.
2014-06-29 11:38:02 +02:00
Thomas Martitz
4b8f42cd9e info bars: Explicitely move focus back to the editor when closing
This does not seem to happen automatically, at least on GTK3.
2014-06-29 11:37:47 +02:00
Thomas Martitz
ab42662309 Fix racy glib assertion failure
Use g_signal_connect_object() to establish automatic and race-free signal
disconnection instead of the hand-crafted mechanism.
2014-06-29 11:29:07 +02:00
Colomban Wendling
35a212dffc Merge branch 'callbacks-cleanup' 2014-06-27 22:32:38 +02:00
Colomban Wendling
3ce25db632 Remove line number zoom hack as it is no longer necessary
Since cbf9813632d7ee921ffa1fda0d1f69128b2bc755 we have a proper
solution for maintaining line number consistent with the editor zoom,
so drop the old hack.

This also allows to remove the now useless third argument of
sci_set_line_numbers().
2014-06-27 22:23:48 +02:00
Thomas Martitz
721769e682 Fix build warning about missing return value. 2014-06-24 23:07:08 +02:00
Colomban Wendling
cc2f1879a8 Add printf attribute to document_show_message() for better safety
Add G_GNUC_PRINTF attribute to document_show_message() so some
compilers can check the format arguments match the format string.
2014-06-24 18:30:54 +02:00
Colomban Wendling
9bf647c5c3 Move on_clone1_activate() to callbacks.c 2014-06-24 18:26:44 +02:00
Thomas Martitz
135b60d25e callbacks: Refactor on_reload_as_activate() as document_reload_prompt()
The callback wasn't used from glade but is useful for some other places so
it's worth moving into document.c. This also fixes a bug where reload via sidebar
always reloads the current document instead of the actually clicked one.
2014-06-24 15:01:42 +02:00
Colomban Wendling
c79c983364 Fix build with GLib < 2.32
Second part of #1047.
2014-06-04 14:31:12 +02:00
Colomban Wendling
ea6ebaf48f Fix build with GTK < 2.24
Part of #1047.
2014-06-04 14:16:39 +02:00
Colomban Wendling
147167cfa5 infobars: Use wrap labels to avoid cropped infobars
Since the infobar is backed in a GtkPaned that allows "shrink", if the
content is too wide, it's far end will just get cropped.  Also, wrap
labels are nicer to display possibly long texts as it flows naturally.
2014-05-28 18:01:23 +02:00
Colomban Wendling
7a4b524661 Avoid code duplication in document_get_current() 2014-05-27 18:00:56 +02:00
Colomban Wendling
46f01bff59 Properly mirror document_get_from_page() in document_get_notebook_page()
Now document_get_from_page() supports arbitrary nesting inside the
notebook page, update document_get_notebook_page() to support it also,
by searching up for the direct notebook child rather than assuming it
is the ScintillaWidget's direct parent.
2014-05-27 17:55:00 +02:00
Colomban Wendling
d399957471 Fix an inverted check 2014-05-27 16:02:59 +02:00
Colomban Wendling
2b9ecc2e4f Remove unused variables and avoid variable shadowing 2014-05-26 16:24:24 +02:00
Thomas Martitz
19e24fb5ee infobars: Dismiss the info bar when reloading via toolbar button/keybinding. 2014-05-24 19:42:46 +02:00
Thomas Martitz
b96daf6fc0 infobars: Do not use GeanyWrapLabel for now, it has problems on gtk3. 2014-05-24 16:32:58 +02:00
Thomas Martitz
100e0e1bf1 infobars: Intercept some keys when the info bar is shown to allow interacting with it using the keyboard only.
When the info bar is shown tab/shift+tab and escape are intercepted.
* tab/shift+tab change the focus to the info bar buttons which can then be
  cycled through with more tab presses
* escape closes the info bar (same as clicking cancel)

Both keys aren't needed for the document because it's read-only. Other keys,
such arrow/page up/down, remain to the document for navigating.
2014-05-24 15:05:33 +02:00
Thomas Martitz
1dc96f1e50 infobars: Cancel "reload file" dialog when spawning the "resave file" one.
When the file was deleted from disk the message that the file is newer on
disk has become out of date and irrelevent.
2014-05-24 15:05:15 +02:00
Thomas Martitz
b487d8dea3 infobars: Do not show reload and resave messages more than once since only the
last one (respectively) is significant to the user.
2014-05-24 15:05:14 +02:00
Thomas Martitz
5117940ff6 infobars: Make document read-only while infobar is shown.
This avoids accidental changes the file until the infobar is ackowledged. The
document can still be viewed and scrolled through but modifications and saving
are disabled. Of course ignoring the document by changing to another one is
also possible.
2014-05-24 15:05:14 +02:00
Matthew Brush
43bff93046 Make locate_sci_in_container() search recursively
Supports changes to the widget heirarchy in the future.
2014-05-24 15:05:14 +02:00
Matthew Brush
e469aa6acc Use document_show_message() when a file is removed from disk
The close button is removed from the dialog also since the user can easily
choose to close the document normally.

Setting default response removed since it's not working yet.
2014-05-24 15:05:08 +02:00
Matthew Brush
667c35a004 Use document_show_message() when a file is externally modified
Two other related changes are that document_set_text_changed() is used to
indicate that the buffer is different from what's on disk and also that
the 'Close' button has been removed from the dialog since the user can easily
just close the document themselves the normal way.
2014-05-24 14:47:57 +02:00
Matthew Brush
a6bbea53c8 Add new function document_show_message() 2014-05-24 14:47:57 +02:00
Matthew Brush
9f587e9c26 Pack Scintilla widgets into a GtkVBox and use it as the notebook page.
This is to allow stacking widgets such as GtkInfoBar above the Scintilla
widget in each tab.

notebook.c need to be changed because the document isn't the direct widget
anymore which was assumed for tab closing.
2014-05-24 14:46:49 +02:00
Matthew Brush
4efcbab332 Include what you use
This is a mega-commit - because most of it had to be done in one go
otherwise some commits would fail to compile - that attempts to fix a
few problems with Geany's includes as well as various other related
cleanups. After this change it's easier to use includes and there's
little worry about which order things are included in or who includes
what.

Overview of changes:

* Include config.h at the start of each source file if HAVE_CONFIG_H
  is defined (and never in headers).
* Go through each source file and make the includes section generally
  like this:
  - Always config.h first as above
  - Then if the file has a header with the same name, include that
  - Then include in alphabetical order each other internal/geany header.
  - Then include standard headers
  - Then include non-standard system headers
  - Then include GLib/GTK+ related stuff
* Doing as above makes it easier to find implicit header include
  dependencies and it exposed quite a few weird problems with includes
  or forward declarations, fix those.
* Make geany.h contain not much besides some defines.
  - Add a little header file "app.h" for GeanyApp and move it there
  - Move "app" global to new "app.h" file
  - Move "ignore_callback" global to "callbacks.h"
  - Move "geany_object" global to "geanyobject.h"
* Add an include in "geany.h" for "app.h" since GeanyApp used to be
  defined there and some plugins included this header to access
  GeanyApp.
* Include "gtkcompat.h" everywhere instead of gtk/gtk.h so that
  everywhere sees the same definitions (not a problem in practice AFAIK
  so this could be changed back if better that way.
* Remove forward declarations from previous commits as some people
  apparently consider this bad style, despite that it reduces inter-
  header dependencies.

TODO:
* As always, to test on win32
* As always, to test with not Autotools
* Test plugins better, both builtin and geany-plugins, likely API/ABI bump
* Test with various defines/flags that may change what is included
* win32.[ch] not really touched since I couldn't test
2014-05-21 15:37:19 -07:00
Matt Copperwaite
e61bba1bc3 Reword "replace by tabs/spaces" as "replace with" 2014-05-05 05:09:13 +02:00
Nick Treleaven
5ff38b4daa Fix document pointer documentation
Improve clarity and remove wrong documentation about using `is_valid` to
check if a document still exists.
2014-04-28 12:34:13 +01:00
Nick Treleaven
5758b9ca67 Add foreach_document(), documents[] examples 2014-04-27 16:14:09 +01:00
Colomban Wendling
d32ae83202 Apply filetype-specific indentation settings for newly opened files
Fix the check enabling filetype-specific indentation settings to also
pass if the document has no filetype set yet, e.g. when opening it.
2014-04-14 02:46:11 +02:00
Colomban Wendling
148283356d Fix a missing cast (oops) 2014-04-12 16:17:52 +02:00
Colomban Wendling
3cf35f24c5 Fix possible crash on quit
When quitting, we still have to destroy the Scintilla widget to avoid
any possibility for us to receive signals from it after we destroyed
the associated editor and/or document (used in signal handlers).

I myself don't suffer from the issue, but it is theoretically possible
for Scintilla to emit signals anytime before it is destroyed, so it is
safer like this anyway.  And an user on IRC suffered from crashes on
quit because of this issue, so it seems to actually happen in some
situations.
2014-04-12 16:14:15 +02:00
Colomban Wendling
7473e4b1d9 Add defensive checks for function receiving a GeanyDocument argument
Always check the passed-in GeanyDocument argument is a valid one, not
to possibly work on an invalid document.
2014-01-22 17:38:29 +01:00
SiegeLord
3d7ade4e02 Integrate the Rust lexer with the rest of Geany's functionality 2014-01-14 12:50:38 -05:00
Colomban Wendling
1f2279aefe Always use proper functions argument lists 2013-11-10 01:43:10 +01:00
Colomban Wendling
fe0280037d Indentation width detection: try not to get fooled by comments
C-style multiline comments, used among others in C, C++ and Java, are
often continued on next lines with an additional space followed by an
asterisk:

  1.    /* first comment line
  2.     * continuation line (asterisk is aligned with previous line)
  3.     * last line */

This fools the indentation with detection because lines 2 and 3 from
the above example have an extra space in what is considered being the
line indentation.  In this example, the algorithm would detect an
indentation width of 5 rather than 4, because here most lines have an
indent of 5 -- although they actually have an indent of 4 plus a space
for alignment.  This is not a problem in most situations because there
generally are fewer comment continuation lines than actual code lines
which have a indent multiple of the actual indent width, but with some
code with a lot of comments (e.g. short functions with verbose
documentation comments) this might start to fool the algorithm and
give wrong, annoying, results.

So, try to detect these continuation lines and avoid taking them into
account.
2013-06-02 22:42:47 +02:00
Colomban Wendling
f6e9ac094a Remove use of some of our own deprecated Scintilla wrappers
Remove most obvious calls to our very own deprecated Scintilla wrapper
functions sci_get_text(), sci_get_text_range() and
sci_get_selected_text().

Some calls are still left, but they either really benefit from these
functions or the fix would be more complex.
2013-05-22 04:22:53 +02:00
Colomban Wendling
5412a244ba Fix crash with bulk pattern replacements (introduced with c83a93e)
"regex_match_text" and "regex_matches" being globals, performing
several searches and then the replacements separately lead to them
having unexpected values, resulting in incorrect behavior and crash.

Fix this by removing the globals and instead make the search functions
return match details.  Not only this fixes the issue, but also make the
code a lot more maintainable by not having globals introducing side
effects (proof of them being an issue is that c83a93e inadvertently
broke things bad).
2013-04-13 17:06:47 +02:00
Colomban Wendling
e409b70fab Fix various TMTag leaks 2013-03-17 17:31:36 +01:00
Colomban Wendling
35cc441b74 Merge branch 'gtk3-support'
Conflicts:
	src/ui_utils.c
2013-03-10 17:20:25 +01:00
Colomban Wendling
e5245eb053 Increase the number of lines where filename is replaced upon save as
Search the first 4 lines (instead of 3) for Python templates support.
2013-03-05 23:58:04 +01:00
Colomban Wendling
5b23669649 Fix replacing file name in headers upon save as
The code used a Scintilla-specific regex escape (\<) which doesn't work
anymore since the time we switched to full PCRE (which uses \b).  So,
update the regular expression to PCRE.

Also, properly escape the name to search in the unlikely case it has
regular expression escapes in it;  and properly check for word
boundaries even when not searching with an extension.
2013-03-05 23:47:37 +01:00