89 Commits

Author SHA1 Message Date
Benedikt Heine
717c747a8c truncate overlong messages (fixes #248)
Displaying too heavy notifications can DoS dunst. For example bad
programs, which pipe raw image data into the notification.
Limiting the maximum character length to 5000 circumvents this.

5000 should be ridiculously high to prevent DoS while still not
truncating all correct notifications.
2017-07-09 16:34:47 +02:00
Nikos Tsipinakis
a08fba49d0 Remove bounce setting
Bounce was functionally removed in
b2883b213342c912a76329bb8f6c179ea3451ae5 during the transition from Xft
to Cairo without any mention. There is no use to keeping it in the example dunstrc
and storing the value in the code,

This commit will probably be reversed if and when bounce is
re-implemented.
2017-07-03 15:36:08 +03:00
Nikos Tsipinakis
5e2c781cba Move frame settings to the global section
There is no reason for the frame settings to have their own section
since it's not an area that will be expanded upon. Move them to the
global section to be consistent.
2017-07-01 11:56:15 +03:00
Reto Schnyder
d9977cbb41 Handle clicks on release instead of press
This prevents the release event from going to the window behind if the
click closes the notification.
2017-06-29 20:04:14 +02:00
Reto Schnyder
c8e6f317ab Move url prefix removal to open_browser
This way, it also applies to middle clicks.
Incidentally, it seems this fixed a crash when opening <a href> urls.
2017-06-29 19:59:50 +02:00
Reto Schnyder
e04bfe0a58 Allow middle click on notification to invoke action
A middle click on an notification with a single or default action will
invoke it. If there are multiple actions and no default, the context
menu is opened. If there are no actions, proceed similarly with URLs.
2017-06-29 19:38:54 +02:00
Nikos Tsipinakis
aec3533a0b Add frame and experimental to the section list excluded from rules
The frame and experimental sections are currently used for some settings
related to frame colour and experimental features respectively and as
such should not be parsed as rules.
2017-06-27 10:59:05 +03:00
Nikos Tsipinakis
2df3c2291d Add identically named command line flags for all settings
Make every setting be overridable from the command line using
-setting_name. Previously, some settings had shortened command line
flags (e.g. -fn instead of -font) which made the command line arguments
confusing.
2017-06-27 10:46:12 +03:00
Nikos Tsipinakis
ce28250109 Merge pull request #315 from Tadly/master
added body-hyperlinks to capabilities as it is supported
2017-06-15 06:44:52 +03:00
Nikos Tsipinakis
8b74a756c2 Redraw the window after an expose event
Expose events, according to the X11 documentation, signify when the
contents of a window region have been lost but until now we have been
ignoring this event for unknown reasons.

Handle this event by redrawing the window entirely. While this is not a
perfect solution, the optimal one would be to only redraw the
region that was lost, it's simpler to implement currently and better
than losing the contents of the window entirely.
2017-05-04 17:54:06 +03:00
Nikos Tsipinakis
56dfc25baf Add warning if RandR initialization fails
Since currently the multimonitor extension support is a compile-time
argument, there is not much we can do to recover from not being able to
initialize RandR other than print an error and exit.
2017-05-04 17:53:01 +03:00
Nikos Tsipinakis
ce623af5ae Remove unused verbosity variable 2017-05-04 17:49:31 +03:00
tadly
2587173048 added body-hyperlinks to capabilities as it is supported 2017-04-05 16:44:04 +02:00
Nikos Tsipinakis
03c82c22e3 Fix uninitialized class name in dpi handling
Make the class in the XrmGetResource call be the same as the resource
name we are trying to retrieve, "Xft.dpi". Nowhere in the documentation
it is mentioned that the class name can be NULL so it is better to be
cautious and set it to a value that is unlikely to affect anything.
2017-04-02 19:41:36 +03:00
Nikos Tsipinakis
43b4d4bb41 Add per_monitor_dpi experimental setting
Calculating the screen dpi on a per-monitor basis can cause
inconsistencies if multiple monitors with slightly different dpis are
used and in some cases it might not be the expected behaviour.

As such, the per-monitor dpi calculation was changed from a default
fallback to an opt in experimental feature and the default value of 96
will be used for the dpi if Xft.dpi is not set.

In the future, depending on how we decide to continue, we can either
move this setting in the global configuration section and fall back to
the X11 display dpi as the default or simply always use the per-monitor
dpi calculation. But to preserve backwards compatibility, this decision
can wait until the next major release.
2017-04-02 18:27:12 +03:00
Nikos Tsipinakis
52600cdfb0 Refactor monitor handling to keep track of all screens
Previously, we were getting screen info every time we tried to move the
window. To improve the situation, information about the available
screens is initialised once when dunst starts and further behaviour
depends on the compile-time options used.

If Xrandr is enabled, screen information is updated when an
XRRScreenChangeNotify event is received, meaning only when the screen
layout changes.

If Xinerama is enabled, screen information is only updated on startup.
This behaviour might be changed later.

If none are enabled, then dunst assumes only one screen and ignores all
multi-monitor options.
2017-04-02 18:27:12 +03:00
Nikos Tsipinakis
0a6b105f4a Move screen related code into a new file
Since we are adding Xrandr support to allow for automatic dpi detection,
split screen handling code into a new file as part of the effort to
simplify x.c
2017-04-02 18:27:12 +03:00
Nikos Tsipinakis
ebea092ddd Move x.{c,h} to a different subdirectory
x.c has grown into an unmaintainable blob. Moving it in its own
subdirectory is the first step to splitting it into submodules each of
which will have a well defined job so that a lot of the code can be
abstracted to improve readability and make it much easier to maintain.

This process will be done one small part at a time only when we need to
change significantly change a part of the file, there is no need to
break what already works.
2017-04-02 18:27:12 +03:00
Eizen
4dd628ccf4 Add auto-detect dpi method
If Xft.dpi value is not available, auto-detect value based on monitor using randr provided sizes.
Disable Xinerama and enable randr by default.
Also update dpi everytime the monitor changes.
2017-04-02 18:27:12 +03:00
Eizen
cc3a08c1db Add DPI detection method
Use Xft.dpi if available
2017-04-02 18:27:12 +03:00
Nikos Tsipinakis
a6046586a3 Fix minor memory leak
When checking for the markup value in rules, an empty string was
specified as the default value so it can easily be checked if the actual
config value was empty or not. While that string got strdup'ed in the
ini_get_string call, it was only freed if the length > 0, effectively
leaking a tiny amount of memory.

Change that behaviour to use a NULL check instead to avoid leaking
memory.
2017-04-01 22:50:40 +03:00
Luke Shumaker
1f77b28691 markup.c: markup_unquote(): Unquote things in the correct order
Because "&" is not the last character to be unescaped, it is possible that
the lines for "<" and ">" expand some things they shouldn't.

For example, "&amp;lt;" should become "&lt;", but instead it becomes ">".
While this is unlikely to appear naturally in a notification, it is wrong.
2017-03-13 16:40:28 -04:00
Luke Shumaker
18c4b4bf7a markup.c: Tidy, expand comments
This turns a hard-to-understand nested if{} chain into a simple switch
statement, and pulls some code out in to utility functions.

This is strictly a code-organization change, and should contain no
functional changes.
2017-03-13 16:40:28 -04:00
Luke Shumaker
0c84e53afb Move markup handling into markup.{c,h}
This is strictly a code-organization change, and should contain no
functional changes.
2017-03-09 11:32:06 -05:00
Luke Shumaker
bf01932471 option_parser: Fix inconsistent Warning message.
Usually, it's "Warning: invalid config file at line %d", but in one case
there's a colon after "line".
2017-02-25 21:27:49 -05:00
Nikos Tsipinakis
c23af0e021 Don't leave zombie processes if dmenu call fails
If dmenu didn't return anything we returned out of the function without
calling `waitpid` to collect the childs exit code, leaving to the child
process to be left as a zombie indefinitely. This commit makes `waitpid`
be called before the return checks are done.
2017-02-23 20:24:45 +02:00
Nikos Tsipinakis
b034d31f80 Merge pull request #299 from LukeShu/fix-nl
Expand "\\n" to "\n" in the format string only; not message text.
2017-02-23 16:24:07 +02:00
Nikos Tsipinakis
375fcad223 Don't unconditionally append to dmenu_input
When generating the list of urls to pass to dmenu, string_append with a
newline as a separator was called unconditionally. This caused a newline
character to be added for each notification even if it didn't contain
any urls, leading to empty items in dmenu.

Fixes #300
2017-02-21 22:43:22 +02:00
Nikos Tsipinakis
f624c42432 Improve dbus error handling
* Improve error reporting to also include the glib error messages
* Call g_error_free after an error to avoid leaking memory.
2017-02-20 18:04:24 +02:00
Nikos Tsipinakis
37628f3dc4 Print errors to stderr
A lot of error reporting used a simple `printf` call which by default
prints to stdout. This was changed so that all error reporting is done
by an `fprintf(stderr, ...)` call.
2017-02-20 17:48:11 +02:00
Nikos Tsipinakis
2d53c898db Print usage information to stdout instead of stderr
It doesn't make much sense to print usage into to stderr. What's more is
that it prevents users from easily piping the output to other
programs(i.e. grep)
2017-02-20 17:28:54 +02:00
Nikos Tsipinakis
92e83a939f Remove a few more leftover memory allocation checks
According to the glib memory allocation documentation, if any memory
allocation calls fail the application will be terminated so there is no
need to check if the call succeeded.
2017-02-20 17:25:59 +02:00
Luke Shumaker
e37bbad2d7 Expand "\\n" to "\n" in the format string only; not message text.
This is consistent with other implementations; neither notification-daemon
or xfce4-notifyd expand "\n" in message text.
2017-02-20 03:48:26 -05:00
Eizen
4df1a4b731 Fix small bug 2017-02-19 17:11:19 -03:00
John Chen
8ba62dc78a Use g_malloc0 where appropriate; remove unneeded null check 2017-02-14 00:45:02 +08:00
John Chen
656846900a Fix missing * in option_parser.c 2017-02-14 00:45:02 +08:00
John Chen
17e2929ee7 Change malloc and related functions to glib ones.
* malloc  -> g_malloc
* realloc -> g_realloc
* free    -> g_free
* strdup  -> g_strdup
* strndup -> g_strndup
2017-02-14 00:44:53 +08:00
John Chen
7037afb2bc Fix include. Add empty lines between include layers. 2017-02-14 00:39:04 +08:00
Nikos Tsipinakis
eb2fda4bde Default to the config.h default if markup is not set
If neither the new 'markup' option is set nor 'allow_markup' then
default to whatever mode is set in config.h.
2017-02-12 21:27:55 +02:00
Nikos Tsipinakis
faea58159c Don't try to parse previously non-existent 'allow_markup' cmdline argument 2017-02-12 21:23:34 +02:00
Nikos Tsipinakis
345a821d86 Use stdlibs boolean macros rather than Xlibs
'True' and 'False' are defined in Xlib.h

Since we use stdbool boolean 'true' and 'false' definitions in several
places, it's best not to mix boolean macros. So in the sake of
consistency switch to using the stdbool macros project-wide.
2017-02-12 21:17:38 +02:00
Nikos Tsipinakis
de20697a69 Rename hide_duplicates_count -> hide_duplicate_count 2017-02-12 21:17:38 +02:00
Eizen
ceddf57a31 Add history_ignore rule
Fixes #197
2017-02-11 15:35:32 -03:00
Eizen
3ef15065a3 Fix ignore_newline regardless of markup
Fix issue where ignore_newline wouldn't work with other markup options. Fixes #293
2017-02-11 15:33:59 -03:00
Nikos Tsipinakis
956f91f6a4 Fix issue with loading config files with lines bigger than BUFSIZ
To load each line of the configuration file we were previously using a
simple buffer of length BUFSIZ. BUFSIZ is a macro provided by glibc as
the 'recommended length for a buffer'. But since one of our users
encountered a situation where really long config lines were necessary
it's time to change that behaviour.

This commit changes the line reading from using fgets with a character
limit of BUFSIZ to simply using getline.

We initialize the buffer pointer to NULL since getline will
automatically allocate a big enough buffer for us if it's passed a NULL
pointer. After that we pass the same buffer pointer again since,
according to the getline manpage, getline will also call realloc on the
buffer if necessary. Which means the only thing we have to do is call
free() at the end of the parsing process.

Fixes #294
2017-02-11 18:00:11 +02:00
Nikos Tsipinakis
42a641c728 Take allow_markup into account if markup is not set
Preserve backwards compatibility for now, this might be removed for the
3.0 release later on.
2017-02-08 20:55:48 +02:00
Eizen
ec96871a0f Fix icon alignment with dynamic width 2017-02-06 17:11:26 -03:00
Nikos Tsipinakis
3f5257f285 Remove unused function string_to_argv 2017-02-05 13:05:52 +02:00
Nikos Tsipinakis
0c49b49254 Replace string_to_argv util function with g_shell_parse_argv
string_to_argv parsing was very simplistic and didn't properly handle
quotations. Since we are already using glib, g_shell_parse_argv serves
the same purpose with much better parsing and error handling.
2017-02-05 13:00:59 +02:00
Nikos Tsipinakis
f0808f8d3f Fix alignment setting documentation
`alignment` specifies the alignment of the text within the notifications,
not the alignment of the notifications themselves.
2017-02-05 13:00:59 +02:00