Comments 31
Вопрос Вам и xverizex — а Vala пробовали использовать? С того самого момента как я о нем узнал, было интересно пообщаться с тем, кто использовал его.
Кстати API вида "все_эти_названия_функций" достаточно удобно оборачиваются в классы, например с помощью C#, если уж очень не хочется писать на C. Но как пишет автор статьи и за решеткой есть жизнь, и на кладбище есть плюсы (с) — C и правда хорош своей неизменностью.
Если показать что на gtk можно сделать и так, то тут почти ничего нет: ни контролов с обработкой событий, ни даже примера кода с флагами компилятора. Без этого выглядит как будто вы только что узнать что такое gtk и делитесь радостью. Но в чем польза для сообщества?
Меня, например, заинтересовало ваше переключение между темами, но воспроизвести его у себя вы не даете.
Или вот вы пишете «я создаю специальную переменную, так называемую STUBS, которой я ничего не присваиваю.» — а в чем тогда ее смысл? Она ведь даже нигде по коду больше не используется.
«Первое что нужно сделать, это создать приложение, которое будет видно на dbus шине.» — а зачем приложению быть видимым на dbus шине? Особенно учитывая что gtk штука кроссплатформенная, а на некоторых платформах dbus шины просто нет.
struct widgets **p = ( struct widgets ** ) &w;
for ( int i = 0; p[i] != NULL; i++ ) {
gtk_widget_set_name ( ( GtkWidget * ) p[i], name );
}
насчет dbus. ну я считаю что не нужно ограничивать приложение только из-за того, что в других ос нет dbus. я хочу пользоваться всеми преимуществами ос и правильней будет использовать dbus. потому что этот dbus просто классная штука. а если хотите для windows 10 делать, то лучше использовать WinRT или как она там называется, которая работает на windows 8 и 10. ну это моё мнение. я бы так делал. то есть я бы не стал пытаться сделать gtk приложение нормальное для windows. большинство библиотек скомпилировано для VC, то есть visual studio и было бы логичней для windows писать в Visual Studio не классические приложения, а новые. а в linux я предпочитаю gtk, gio, glib.
Вам, конечно, виднее, но КМК если в структуре нужен NULL — нужно использовать NULL, а не неинициализированную переменную.
Идея использовать структуру в роли массива с именами — прикольная ;)
mov rax, [rax + 8]
а вот так?
mov rax, [rax + 10]
мне слабо вериться что компилятор будет так делать. откуда вы вообще взяли, что компилятор будет в структуре добавлять что-то?
0x0000555555558050 <+71>: lea rdx,[rax*8+0x0]
0x0000555555558058 <+79>: mov rax,QWORD PTR [rbp-0x118]
0x000055555555805f <+86>: add rax,rdx
всё просто и логично. каждый раз умножается на 8 индекс. если бы по вашему компилятор работал по другому, то такого цикла в принципе быть не могло, и тогда он каждый вызов будет писать по порядку. но разве есть такой компилятор?
STUBS нужен для того, чтобы в функции set_theme, смотрите. там проверяется на NULLНо вы не инициализируете его нулем, то есть в общем случае значение там может быть любое.
Да и потом, структура у вас ведь константная, что мешает использовать обычный sizeof?
Ах да, еще ведь у вас виджеты не сферические в вакууме, а выстроены в какую-то иерархию. Так может, проще пройтись по дереву?
я бы не стал пытаться сделать gtk приложение нормальное для windowsВариантов я вижу три:
— полностью забить на поддержку «некошерной» платформы
— писать под каждую платформу код почти с нуля
— использовать кроссплатформенные библиотеки, а то, чего там нет, выносить в слой совместимости.
Собственно, я сейчас развлекаюсь именно с третьим способом: если уже есть кроссплатформенная gtk, почему я должен следовать вашему совету и лишаться этого преимущества?
Но вы не инициализируете его нулем, то есть в общем случае значение там может быть любое.
не может оно быть любое. по соглашению всё что находится в глобальной области видимости при создании инициализируется нулем.
gtk, почему я должен следовать вашему совету и лишаться этого преимущества?
не я имел ввиду использовать по полной возможности ос. например в linux есть dbus, в windows есть реестр. вы можете из gtk в реест записывать данные? я например не знаю как это сделать. да и в принципе я в windows не программирую. немного пописал классические приложухи. вот например я в своем twitch боте сделал функцию такую, что можно audacious плеером управлять через чат. и это благодаря dbus. и то что вы приняли как за совет, я писал что это бы я так сделал. то есть это бы я писал для windows на этом, а для linux на этом.
Или dbus — он ведь нужен не сам по себе, а для вполне конкретного взаимодействия программ. Скажем, перетаскивание файлов из какого-то другого окна в наше. Если в линуксе это делается через dbus, а в винде через… winapi — значит, надо писать слой совместимости.
GLib, GObject, GTK — это всё, конечно, наркомания высших порядков (если интересно, можно почитать пару статей про GObject). Однажды кому-то пришла в голову очень смелая мысль: почему бы не сделать систему с объекто-ориентированным дизайном на языке, который для этого совсем не предназначен. И они сделали. Не сказал бы, что результат трудов оказался негодным, скорее всего это венец того, что можно создать с помощью голого C, но писать на этом программы всё равно выходит совсем не простым делом. Если бы это было просто и удобно, такие вещи как Vala никогда не появились.
К чему я это? Да собственно к тому, что если не хочется писать GUI на Qt/C++ для Linux, возьмите хотя бы Vala, это может сэкономить много нервных клеток. :)
(...) не хочу учить каждые три года стандарты C++, чтобы быть на волне.
Грустно
Создаём приложение на gtk