aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-02-11 02:37:38 +0000
committerPo Lu2022-02-11 02:37:38 +0000
commitc7bde988068786a5e6e00d91cf3165b8a3ce0fde (patch)
treed0be165be18ff6fc625ffce98e69fa1a8c475d5f /src
parent2469e036035f8f5baa78e1557c61df019d8fd572 (diff)
downloademacs-c7bde988068786a5e6e00d91cf3165b8a3ce0fde.tar.gz
emacs-c7bde988068786a5e6e00d91cf3165b8a3ce0fde.zip
Improve reliability of selection ownership on Haiku
* src/haiku_select.cc (count_clipboard, count_primary) (count_secondary): Initialize to -1 (BClipboard_set_system_data) (BClipboard_set_primary_selection_data) (BClipboard_set_secondary_selection_data): Store count before saving to the the clipboard. (BClipboard_owns_clipboard, BClipboard_owns_primary) (BClipboard_owns_secondary): Adjust tests accordingly.
Diffstat (limited to 'src')
-rw-r--r--src/haiku_select.cc27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/haiku_select.cc b/src/haiku_select.cc
index d39000d8bbe..011ad58036f 100644
--- a/src/haiku_select.cc
+++ b/src/haiku_select.cc
@@ -29,9 +29,9 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
29static BClipboard *primary = NULL; 29static BClipboard *primary = NULL;
30static BClipboard *secondary = NULL; 30static BClipboard *secondary = NULL;
31static BClipboard *system_clipboard = NULL; 31static BClipboard *system_clipboard = NULL;
32static unsigned long count_clipboard = 0; 32static int64 count_clipboard = -1;
33static unsigned long count_primary = 0; 33static int64 count_primary = -1;
34static unsigned long count_secondary = 0; 34static int64 count_secondary = -1;
35 35
36int selection_state_flag; 36int selection_state_flag;
37 37
@@ -176,8 +176,8 @@ BClipboard_set_system_data (const char *type, const char *data,
176 if (!system_clipboard) 176 if (!system_clipboard)
177 return; 177 return;
178 178
179 BClipboard_set_data (system_clipboard, type, data, len, clear);
180 count_clipboard = system_clipboard->SystemCount (); 179 count_clipboard = system_clipboard->SystemCount ();
180 BClipboard_set_data (system_clipboard, type, data, len, clear);
181} 181}
182 182
183void 183void
@@ -187,8 +187,8 @@ BClipboard_set_primary_selection_data (const char *type, const char *data,
187 if (!primary) 187 if (!primary)
188 return; 188 return;
189 189
190 BClipboard_set_data (primary, type, data, len, clear);
191 count_primary = primary->SystemCount (); 190 count_primary = primary->SystemCount ();
191 BClipboard_set_data (primary, type, data, len, clear);
192} 192}
193 193
194void 194void
@@ -198,8 +198,8 @@ BClipboard_set_secondary_selection_data (const char *type, const char *data,
198 if (!secondary) 198 if (!secondary)
199 return; 199 return;
200 200
201 BClipboard_set_data (secondary, type, data, len, clear);
202 count_secondary = secondary->SystemCount (); 201 count_secondary = secondary->SystemCount ();
202 BClipboard_set_data (secondary, type, data, len, clear);
203} 203}
204 204
205void 205void
@@ -229,22 +229,25 @@ BClipboard_secondary_targets (char **buf, int len)
229bool 229bool
230BClipboard_owns_clipboard (void) 230BClipboard_owns_clipboard (void)
231{ 231{
232 return (count_clipboard 232 return (count_clipboard >= 0
233 == system_clipboard->SystemCount ()); 233 && (count_clipboard + 1
234 == system_clipboard->SystemCount ()));
234} 235}
235 236
236bool 237bool
237BClipboard_owns_primary (void) 238BClipboard_owns_primary (void)
238{ 239{
239 return (count_primary 240 return (count_primary >= 0
240 == primary->SystemCount ()); 241 && (count_primary + 1
242 == primary->SystemCount ()));
241} 243}
242 244
243bool 245bool
244BClipboard_owns_secondary (void) 246BClipboard_owns_secondary (void)
245{ 247{
246 return (count_secondary 248 return (count_secondary >= 0
247 == secondary->SystemCount ()); 249 && (count_secondary + 1
250 == secondary->SystemCount ()));
248} 251}
249 252
250void 253void