|
1 | 1 | # -*- coding: utf-8 -*- |
2 | | -from gi.repository import Gtk |
| 2 | +from gi.repository import Gtk, GLib, Gdk |
3 | 3 |
|
4 | 4 | from .theme_model import THEME_MODEL, THEME_MODEL_BY_KEY |
5 | 5 | from .palette_cache import PaletteCache |
@@ -434,23 +434,45 @@ def build_theme_model_rows(self): |
434 | 434 | display_name = theme_value.get('display_name', key) |
435 | 435 | row = None |
436 | 436 |
|
437 | | - callback = None |
| 437 | + callbacks = [self.color_edited, ] |
438 | 438 | if theme_value.get('reload_theme'): |
439 | 439 | def _callback(key, value): |
440 | 440 | THEME_MODEL_BY_KEY[key]['fallback_value'] = value |
441 | 441 | self.theme = self.theme_reload_callback() |
442 | | - callback = _callback |
| 442 | + callbacks = [_callback, ] |
443 | 443 | elif key in [ |
444 | 444 | 'ICONS_STYLE', 'THEME_STYLE', |
445 | 445 | 'TERMINAL_BASE_TEMPLATE', 'TERMINAL_THEME_MODE', |
446 | 446 | 'TERMINAL_THEME_AUTO_BGFG', 'TERMINAL_FG', 'TERMINAL_BG', |
447 | 447 | ]: |
448 | | - def _callback(key, value): |
449 | | - self.color_edited(key, value) |
| 448 | + def _callback(key, value): # pylint:disable=unused-argument |
450 | 449 | self.open_theme(self.theme) |
451 | | - callback = _callback |
452 | | - else: |
453 | | - callback = self.color_edited |
| 450 | + callbacks += [_callback, ] |
| 451 | + |
| 452 | + if key in [ |
| 453 | + 'TERMINAL_THEME_MODE', 'TERMINAL_THEME_ACCURACY', |
| 454 | + 'TERMINAL_THEME_EXTEND_PALETTE', 'TERMINAL_BASE_TEMPLATE', |
| 455 | + '_PIL_PALETTE_QUALITY', '_PIL_PALETTE_STYLE', |
| 456 | + ]: |
| 457 | + def _wrap_slow_callbacks(slow_callbacks): |
| 458 | + def _new_cb(key, value): |
| 459 | + GLib.timeout_add(0, self.disable, priority=GLib.PRIORITY_HIGH) |
| 460 | + for slow_cb in slow_callbacks: |
| 461 | + # GLib.idle_add(slow_cb, key, value, priority=GLib.PRIORITY_LOW) |
| 462 | + Gdk.threads_add_idle(GLib.PRIORITY_LOW, slow_cb, key, value, ) |
| 463 | + GLib.idle_add(self.enable, priority=GLib.PRIORITY_LOW) |
| 464 | + return _new_cb |
| 465 | + |
| 466 | + callbacks = [_wrap_slow_callbacks(callbacks), ] |
| 467 | + |
| 468 | + def create_callback(_callbacks): |
| 469 | + def _callback(key, value): |
| 470 | + for each in _callbacks: |
| 471 | + each(key, value) |
| 472 | + |
| 473 | + return _callback |
| 474 | + |
| 475 | + callback = create_callback(callbacks) |
454 | 476 |
|
455 | 477 | if theme_value['type'] == 'color': |
456 | 478 | row = ColorListBoxRow( |
@@ -517,6 +539,12 @@ def open_theme(self, theme): |
517 | 539 | row.set_value(self.theme[key]) |
518 | 540 | row.show() |
519 | 541 |
|
| 542 | + def disable(self): |
| 543 | + self.transient_for.disable() |
| 544 | + |
| 545 | + def enable(self): |
| 546 | + self.transient_for.enable() |
| 547 | + |
520 | 548 | def __init__(self, color_edited_callback, theme_reload_callback, transient_for): |
521 | 549 | self.transient_for = transient_for |
522 | 550 | super().__init__() |
|
0 commit comments