Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 558 559 560 561 562 [563] 564 565 566 567 .. 608   вперед  Ctrl
 Re: Пятница  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3075
Мимопроходящий
надысь венедиктов истерил.
мол, с этим придётся жить...
Его работа на "Газпром Медиа" обязывает...
11 авг 19, 14:59    [21946435]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60707
Господа, политасты, идите в опу со своей политотой. Спасибо.

Posted via ActualForum NNTP Server 1.5

11 авг 19, 18:03    [21946540]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49111

Продолжаю копаться в потрохах линухов. На этот раз будет бурчание по поводу clipboard.

То, что оно работает не как в винде, конечно, понятно и ожидаемо. То, что единого
производителя нет и каждый лепит отсебятину тоже понятно, хоть и всё ещё напрягает. Но
возьмём штуку от единого производителя: X windows. Казалось бы, документ по фамилии ICCM
описывает всё необходимое, тупо бери и соответствуй. И вроде логика в нём тоже есть:
сначала запроси список доступных форматов, выбери понравившийся, запроси данные. Но, как
всегда, "а включаешь - не работает".

Штатный XClipboard, казалось бы, должен быть золотым стандартом и ориентиром для
оставшихся. Хрен! Он даже не пытается запрашивать список форматов, тупо говорит "отдай мне
UTF8_STRING" (который, мимоходом, в упомянутом ICCM вообще не описан).

Чуть менее штатная утилита от того же производителя xclip список форматов запрашивает, но
потом кладёт на него болт и опять тупо просит UTF8_STRING.

GTK умнее - он таки просит формат из поддерживаемого списка. Но перед этим он ТРИ раза
запрашивает этот список. Видимо, с первого раза до него не доходит.

"Ой, ёёёёё..." (с)

Posted via ActualForum NNTP Server 1.5

19 авг 19, 17:48    [21952737]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
legacy code :-)

в Windows обратная картина - один производитель с идиотским нерасширяемым API, который за всех знает как надо
20 авг 19, 11:18    [21953178]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30890

зато на линухе есть интеллектуальная система вводатм.
называется - ИБусь! (IBus)

на сегодня ибусь 1.5.17

Posted via ActualForum NNTP Server 1.5

20 авг 19, 12:31    [21953316]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49111

Arioch
идиотским нерасширяемым API

Вообще-то расширяемым, только это мало кто знает и никто не пользуется. В частности классы
окон там можно не только добавлять свои, но и сабклассить стандартные. После чего
все окна этого класса во всех приложениях меняют своё поведение.

Posted via ActualForum NNTP Server 1.5

20 авг 19, 12:47    [21953342]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
Dimitry Sibiryakov,

Мы говорили чисто про Clipboard API, а не про GDI и WM_xxxxx

Простой пример, надоевший хуже не знаю чего.

Аппликуха, написанная на западе
1. открывает clipboard
2. кладет в clipboard данные типа CF_TEXT (русский текст в 1251)
3. закрывает clipboard (коммиттит транзакцию)

Другая аппликуха, более современная.
1. открывает clipboard
2. берёт из clipboard данные типа CF_UNICODETEXT
3. закрывает clipboard (коммиттит транзакцию)

....и с вероятностью 50% (в смысле блондинки и динозавров) получает кракозябры.
Потому что кодировка для перевода текста в Юникод берётся из *раскладки клавиатуры*, которая с Win95 по win7 в каждом окне своя.

В том же Total Commander я несколько раз автору объяснял - в разных местах программы - как это обходить. Потом появляется новая функция и снова здорово. И это - автор, который активно правит свою программу, не забросил её!

Возникает желание написать свой резидент, который будет на лету исправлять "типичные буржуйские программы". Мне не нужно RegisterClipboardFormat, или сабклассировать окна, я *протокол* хочу расширить/исправить, а не добавить данные в рамках протокола. А-вот-вам-хрен!

1) пока первое окно не "закоммитит" транзакцию я не могу читать, что оно туда нафигачило, не могу повеситься на before-commit, проверить наличие юникодного текста либо кодировки в явном виде и дописать, если не было. Нет такого в протоколе.
2) когда же коммит случился, я не могу открыть буфер, модифицировать его и закрыть обратно. Нет такого в протоколе.
3) теоретически, я могу скопировать все данные из буффера, подправить и вставить обратно. Но окромя race conditions это обламывается как раз ещё и по причине разных кастомных заранее неизвестный форматов, включая динамичесвкие, типа драгндропного файлового объекта и прочих DDE/OLE.

...т.е. единственный способ остаётся - влезать внутрь каждого EXE и там патчить Win32 subsystem, чтобы все Clipboard API уходили на мою реализацию, которая уже потом будет как-то возвращаться к "системной"

потому что даже и - ну хрен с ним с нерасширяемым протоколом, но дайте мне тогда возможность подставить свою реализацию протокола? ...и такого тоже нет.
21 авг 19, 16:38    [21954614]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49111

Arioch
не могу повеситься на before-commit, проверить наличие юникодного текста либо
кодировки в явном виде и дописать, если не было.

Можешь. Точно тем же способом каким это делает Иксовский Clipboad Manager: захватываешь
ownership, ждёшь сообщение о его потере, смотришь кто что туда нафигачил, вытягиваешь и
снова объявляешь себя владельцем. А можешь объявить себя Clipboard Viewer-ом и делать то
же самое.

Arioch
ну хрен с ним с нерасширяемым протоколом, но дайте мне тогда возможность подставить свою
реализацию протокола? ...и такого тоже нет.

Есть. Виндовая клипборда может работать и в активном режиме, аналогично Иксовской.

Posted via ActualForum NNTP Server 1.5

21 авг 19, 16:56    [21954642]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
> захватываешь ownership, ждёшь сообщение о его потере

это как?

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-openclipboard
MSDN
Opens the clipboard for examination and prevents other applications from modifying the clipboard content.
OpenClipboard fails if another window has the clipboard open.


Dimitry Sibiryakov
А можешь объявить себя Clipboard Viewer-ом


А дальше? мне нужно перехватывать именно момент вызова CloseClipboard.
До этого слишком рано - может быть приложение ещё добавит кодировку или юникодный текст.
А после этого уже слишком поздно - Windows само добавило, кракозябры.
22 авг 19, 14:37    [21955546]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49111

Arioch
это как?

Это именно так. Даже если OpenClipboard обломался - ждёшь пока его закроют, повторяешь
попытку. Потом EmptyClipboard - и всё, ownership твой. О его потере тебе сообщат
соответствующим сообщением.

Arioch
А дальше? мне нужно перехватывать именно момент вызова CloseClipboard.

По получении WM_DRAWCLIPBOARD ты не сможешь успешно сделать OpenClipboard пока его не
закроют, не так ли?..

Posted via ActualForum NNTP Server 1.5

22 авг 19, 14:45    [21955562]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
https://docs.microsoft.com/en-us/windows/win32/dataxchg/using-the-clipboard#example-of-a-clipboard-viewer

case CF_TEXT: 
                    if (OpenClipboard(hwnd))  
                    { 
                        hglb = GetClipboardData(uFormat); 


И хрен ты от OpenClipboard тут избавишься
22 авг 19, 14:49    [21955570]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49111

Arioch
И хрен ты от OpenClipboard тут избавишься

Повторяю медленно: от него и не надо избаляться, оно - твоя индикация того, что
CloseClipboard таки свершилось. В точности как ты и хотел.

Posted via ActualForum NNTP Server 1.5

22 авг 19, 15:04    [21955590]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
Dimitry Sibiryakov
Потом EmptyClipboard - и всё, ownership твой.

Пользователь будет счастлив, когда ему буфер зачистят промеждуделом.

MSDN
SetClipboardData function .... The window must be the current clipboard owner


Как мне стать владельцем без зачистки?

https://github.com/Microsoft/Windows-classic-samples/blob/master/Samples/Win7Samples/winui/clipboardchainimprovementapis/ClipboardChainImprovementAPIs.cpp

Вот тут данные добавляют без EmptyClipboard возможно по причине AddClipboardFormatListener


Dimitry Sibiryakov
По получении WM_DRAWCLIPBOARD ты не сможешь успешно сделать OpenClipboard пока его не
закроют, не так ли?..


Я полагаю, я его просто и не получу, пока "транзакцию не закоммитят" вызовом CloseClipboard

А потом уже поздно.

https://docs.microsoft.com/en-us/windows/win32/dataxchg/clipboard-formats#synthesized-clipboard-formats
MSDN
If the system provides an automatic type conversion for a particular clipboard format, and you call EnumClipboardFormats to enumerate the clipboard data formats, the system first enumerates the format that is on the clipboard, followed by the formats to which it can be converted.


Система сама добавляет кракозябры, но про это она явно не говорит.
22 авг 19, 15:10    [21955601]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
Dimitry Sibiryakov
CloseClipboard таки свершилось. В точности как ты и хотел.


свершилось - это AFTER update
а я хотел BEFORE update


Arioch
не могу повеситься на before-commit
22 авг 19, 15:10    [21955602]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49111

Arioch
Как мне стать владельцем без зачистки?

Почитай таки как работает Линуксовый Clipboard Manager. Сначала получи пользовательский
контент себе, преобразуй как хочешь, а потом чисти.

Posted via ActualForum NNTP Server 1.5

22 авг 19, 15:15    [21955607]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
Dimitry Sibiryakov
Почитай таки как работает Линуксовый


Какое отношение это имеет к Windows Clipboard API ?

Dimitry Sibiryakov
начала получи пользовательский контент себе


Что делать с неизвестным мне кастомным контентом другого приложения, с OLE-объектами и черт знает чем ещё ?
22 авг 19, 15:16    [21955609]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49111

Arioch
Что делать с неизвестным мне кастомным контентом другого приложения, с OLE-объектами и
черт знает чем ещё ?

Копируй как есть, будешь отдавать как получил. Именно так работают вышеназванные менеджеры
о работе которых ты упорно отказываешься читать.

Posted via ActualForum NNTP Server 1.5

22 авг 19, 15:26    [21955625]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
Ну прочитал.

There is no “clean” solution to this problem in X11. Instead, ICCCM suggests the use of clipboard managers. They work like this:
The clipboard manager shall claim ownership of a selection.
Once it loses ownership, it will:
Ask the current owner for the content.
Provide the content itself.
Re-claim ownership.

Тут есть одно неявное предположение. Что поскольку всё это идет через сеть, то все данные по сути пассивные бинарные пакеты небольшого размера.

А в случае Windows могут быть например живые OLE-объекты с собственным поведением и вообще всё, что угодно.

Ты исходишь из того, что любые данные в clipboard можно сохранить на диск в файл, а через месяц достать обратно, и это будет то же самое, что оставить исходного владельца и исходные данные нетронутыми. Довольно сильное предположение.
Что будет, если я, например, скопирую в clipboard файл размеров в десяток GB ?

Но даже в этом случае остаётся проблема, как отличать тексты (разных форматов в одном буфере), вставленные приложением, от текстов, магически созданных самой Windows???
22 авг 19, 15:48    [21955650]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
Dimitry Sibiryakov
Чуть менее штатная утилита от того же производителя xclip список форматов запрашивает, но потом кладёт на него болт и опять тупо просит UTF8_STRING.


что ты запросил - то она и запрашивает
запроси любой другой формат и радуйся

откуда она вообще может знать что ты себе в консоль хочешь?

https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.html
$ xclip -o -target TARGETS -selection clipboard 
$ xclip -o -target image/png -selection clipboard >foo.png
22 авг 19, 15:58    [21955663]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49111

Arioch
как отличать тексты (разных форматов в одном буфере), вставленные приложением, от текстов,
магически созданных самой Windows???

Чо? При помещении данных в кдипборду винда ничего не создаёт. Она пытается в меру своих
умственных способностей осуществить "implicit data format conversions between certain
clipboard formats when an application calls the GetClipboardData function" в формате,
которого у неё нет.

Posted via ActualForum NNTP Server 1.5

22 авг 19, 16:15    [21955689]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28505
навеяло названием и содержанием 21955114

(частушка-нескладушка, проблеме не соответствует)
эксекьюте блок глюкает
без саспенда не вставляет
вот же мать его ити
ни туды и ни сюды

p.s. чё-то сегодня рифму не поборол. Крутил и так и сяк, что вышло, то вышло.
23 авг 19, 00:53    [21956118]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Док
Member

Откуда: Казань
Сообщений: 6511
kdv,

хокку? ;)
23 авг 19, 09:25    [21956194]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28505
Док,

не. хокку в этом году как-то не идут. Я ж в деревне с мая месяца, измучен шашлыком, так что только частушки...
23 авг 19, 10:39    [21956259]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Gallemar
Member

Откуда: г.Иркутск
Сообщений: 5270
kdv
Док,

не. хокку в этом году как-то не идут. Я ж в деревне с мая месяца, измучен шашлыком, так что только частушки...


Везет,а я в прошлые выходные первый раз за лето шашлык поел.
23 авг 19, 10:45    [21956271]     Ответить | Цитировать Сообщить модератору
 Re: Пятница  [new]
Arioch
Member

Откуда:
Сообщений: 11097
kdv
вот же мать его ити


тогда и заканчивать надо в рифму, типа

Something rotten in IT
23 авг 19, 11:42    [21956336]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 558 559 560 561 562 [563] 564 565 566 567 .. 608   вперед  Ctrl
Все форумы / Firebird, InterBase Ответить