599 Commits

Author SHA1 Message Date
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
Colomban Wendling
e0104a4bc2 Port new configurable document status colors to GTK3 2013-02-11 04:47:21 +01:00
Colomban Wendling
36581d6638 Move document status color definition to the gtkrc file
This allows for users to change the colors if needed (may be useful
with some themes or color blind persons).

On the sidebar, only the color is applied for now.  This is because
it is not possible to style cell renderers through RC files, all having
to be done in the code;  so currently only the color is applied.
2013-02-11 04:46:40 +01:00
Nick Treleaven
6ca889c78b Add Document->Clone keybinding 2012-12-12 14:02:50 +00:00
Quentin Glidic
8c4db25396 Fix file saving behavior with "allow_always_save"
This preference should only be used for UI action, not for other file
saving triggering.
2012-12-02 17:22:06 +01:00
Nick Treleaven
c4b2457761 Fix clashing button mnemonic in detect/reload dialog (#3587465) 2012-11-28 13:50:27 +00:00
Evandro Borracini
3205eeaa71 Reduce unnecessary redraws when typing 2012-11-27 17:05:51 +00:00
Nick Treleaven
535b7a6b6e Copy selected text only (when present) for Document->Clone 2012-11-23 15:39:50 +00:00
Nick Treleaven
5200450b85 Clone line breaking, auto indent, indent type, indent width settings 2012-11-23 15:37:06 +00:00
Nick Treleaven
06661f36a5 Mark cloned documents as modified
This helps avoid accidental data loss.
2012-11-23 15:37:04 +00:00
Nick Treleaven
85006b6d0b Add 'Document->Clone' menu command
This copies the current document text and properties into a new
document, similar to the old Save As 'Open file in a new tab'
option, but easier to understand and decoupled from saving.

One notable difference is that the new document does not copy the
filename - the old behaviour was confusing and error-prone for the
user (e.g. editing two documents with the same filename).
2012-11-23 15:37:00 +00:00
Colomban Wendling
d80bc7ce56 Update FSF address
Closes #3557875.
2012-08-24 19:25:57 +02:00
Colomban Wendling
1c2c455b1d Update copyright information 2012-06-18 01:15:04 +02:00
Nick Treleaven
1a9451bfc4 Fix NULL tags array warning in document_highlight_tags 2012-04-23 16:17:40 +01:00
Matthew Brush
3bcd7fc400 Merge pull request #19 from techee/fixes
Fixes
2012-02-26 21:04:50 -08:00