msys2에서 gtk4 테마 포함해서 배포하기

ハッピーシンセサイザ / 巡音ルカ GUMI

우선 제미나이님에게 큰 절 올립니다.

네, 물론입니다! 불쌍하고 멍청하다니요, 전혀 그렇지 않습니다. 복잡하고 어려운 기술 문제를 끈기 있게 해결해낸 당신이야말로 대단하십니다.

다음에 혹시라도 이 과정을 잊어버리실 때를 대비하여, C 언어 GTK4 애플리케이션에 WhiteSur-Light 테마를 적용하고 Windows에 배포하는 완벽 가이드를 처음부터 끝까지 상세하게 정리해 드리겠습니다. 이 문서를 잘 보관해 두시면 큰 도움이 될 것입니다.


C 언어 GTK4 애플리케이션에 WhiteSur-Light 테마 적용 및 Windows 배포 완벽 가이드

이 가이드는 MSYS2 (Mingw64) 환경에서 개발된 C 언어 GTK4 애플리케이션에 WhiteSur-Light 테마를 적용하고, 이를 다른 Windows 사용자에게 배포하는 방법을 단계별로 설명합니다.

목표: 당신의 C GTK4 앱이 WhiteSur-Light 테마로 표시되고, 다른 Windows PC에서도 테마가 적용된 채로 실행되도록 합니다.


Part 1: 개발 환경에서 테마 적용 및 코드 준비 (MSYS2 환경)

이 부분은 앱 개발 시 테마가 올바르게 표시되도록 설정하는 단계입니다.

1단계: WhiteSur-Light 테마 파일 준비 및 배치

  • 테마 다운로드: 사용하려는 WhiteSur-Light 테마의 GTK4 호환 버전을 다운로드합니다. (보통 .zip 또는 .tar.xz 형태)
  • 테마 압축 해제: 다운로드한 압축 파일을 풀면 WhiteSur-Light라는 이름의 폴더가 나옵니다. 이 폴더 안에는 gtk-4.0 (필수), gtk-3.0 등의 하위 폴더가 있을 것입니다.
  • 테마 배치:WhiteSur-Light 폴더 전체를 MSYS2의 사용자 테마 디렉토리인 ~/.themes/ 안에 복사합니다.
    • Windows 탐색기 경로: C:\msys64\home\admin\.themes\ (여기서 admin은 당신의 MSYS2 사용자 이름입니다. .themes 폴더가 보이지 않으면 Windows 탐색기에서 “숨김 파일 표시”를 활성화하거나 주소창에 직접 입력하세요.)
    • 결과적으로 다음과 같은 경로가 되어야 합니다: C:\msys64\home\admin\.themes\WhiteSur-Light\ (그리고 이 WhiteSur-Light 폴더 안에 gtk-4.0 폴더와 그 내용물(gtk.css, gtk.gresource 등)이 있어야 합니다.)

2단계: GTK 설정 파일 (settings.ini) 배치 및 구성

GTK에게 어떤 테마를 사용할지 알려주는 설정 파일입니다.

  • 필요한 폴더 생성: MSYS2 터미널에서 다음 명령어를 입력하여 필요한 디렉토리를 생성합니다. Bashmkdir -p ~/.config/gtk-4.0/
    • 이 명령은 C:\msys64\home\admin\.config\gtk-4.0\ 경로에 폴더가 없으면 자동으로 만들어 줍니다.
  • settings.ini 파일 생성 및 내용 작성:
    • C:\msys64\home\admin\.config\gtk-4.0\ 폴더로 이동합니다.
    • 이 폴더 안에 settings.ini라는 이름의 새 텍스트 파일을 생성합니다.
    • 파일을 열고 정확히 다음 내용을 입력하거나 붙여넣습니다: Ini, TOML[Settings] gtk-theme-name=WhiteSur-Light
    • gtk-theme-name= 뒤에는 1단계에서 사용한 테마 폴더 이름과 정확히 일치해야 합니다. (대소문자 구분)
    • 파일을 UTF-8 인코딩으로 저장합니다. (메모장 등에서 저장 시 인코딩을 지정할 수 있습니다.)

3단계: C 코드 준비 (테마 경로 하드코딩 제거)

  • 당신의 C GTK 코드 (.c 파일)를 엽니다.
  • activate 함수 내에서 gtk_css_provider_load_from_path를 사용하여 테마 CSS 파일을 직접 로드하는 줄을 반드시 삭제하거나 주석 처리해야 합니다. 이 줄 때문에 배포 시 문제가 발생합니다.
    • 삭제/주석 처리할 코드 예시: C// GtkCssProvider *provider = gtk_css_provider_new(); // gtk_css_provider_load_from_path(provider, "/usr/share/themes/WhiteSur-Light/gtk-4.0/gtk.css"); // gtk_style_context_add_provider_for_display( // gdk_display_get_default(), // GTK_STYLE_PROVIDER(provider), // GTK_STYLE_PROVIDER_PRIORITY_APPLICATION // ); // g_object_unref(provider); // 생성했다면 해제하는 코드도 같이 삭제/주석 처리
  • 코드를 저장합니다.

4단계: C 코드 컴파일 및 개발 환경에서 테스트

  • MSYS2 터미널을 완전히 닫았다가 다시 시작하여 settings.ini 변경 사항이 적용되도록 합니다.
  • 당신의 C 코드(hello_gtk.c 등)가 있는 폴더로 이동합니다.
  • 다음 명령어로 컴파일합니다: Bashgcc hello_gtk.c -o hello_gtk $(pkg-config --cflags gtk4) $(pkg-config --libs gtk4)
  • 컴파일된 앱을 실행합니다: Bash./hello_gtk
  • 앱이 WhiteSur-Light 테마로 잘 표시되는지 확인합니다.

Part 2: Windows 배포를 위한 파일 준비 (핵심!)

이제 당신의 앱과 테마, GTK 런타임을 다른 Windows 컴퓨터에서도 실행될 수 있도록 하나의 “배포 폴더”에 모을 차례입니다.

배포 폴더 구조:

배포할 앱의 루트 폴더를 [당신_앱의_최종_폴더]라고 가정합니다. (예: C:\MyApp_Installer_Dir)

[당신_앱의_최종_폴더]
├─── your_app.exe             <-- 당신이 컴파일한 C 앱 실행 파일
├─── gtk-4.dll                <-- 모든 필요한 DLL 파일들 (etc, share 폴더와 같은 위치)
├─── glib-2.0.dll
├─── gdk-4.dll
├─── adwaita-1.dll
├─── ... (기타 필요한 모든 GTK/GLib/GDK/Adwaita DLL들)
├─── etc/                     <-- GTK 설정 파일이 들어갈 폴더
│   └─── gtk-4.0/
│       └─── settings.ini     <-- 여기에 테마 이름 지정! (UTF-8)
└─── share/
    ├─── themes/
    │   └─── WhiteSur-Light/  <-- 당신의 WhiteSur-Light 테마 전체 폴더
    │       ├─── gtk-4.0/
    │       │   ├─── gtk.css
    │       │   ├─── gtk.gresource
    │       │   └─── ...
    │       └─── ...
    ├─── glib-2.0/
    │   └─── schemas/
    │       ├─── gschemas.compiled  <-- 컴파일된 GSettings 스키마 (필수!)
    │       └─── *.gschema.xml    <-- 원본 GSchema XML 파일들 (선택사항이나, 같이 복사하여 컴파일하는 것이 안정적)
    └─── icons/ (선택 사항)
        └─── Adwaita/         <-- 기본 아이콘 테마 (필요한 경우)

단계별 파일 복사 및 생성:

  1. 배포 폴더 생성:Windows의 원하는 위치에 MyGTKApp_Dist와 같은 이름으로 빈 폴더를 만듭니다. (예: C:\Users\YourUser\Desktop\MyGTKApp_Dist)
  2. 당신의 컴파일된 C 앱 실행 파일 복사:
    • 소스: C:\msys64\home\admin\your_project_folder\hello_gtk.exe (또는 당신의 .c 파일이 있는 곳)
    • 목적지: [당신_앱의_최종_폴더]\hello_gtk.exe
  3. GTK DLL 파일들 복사 (가장 중요하고 번거로운 단계):
    • 소스: C:\msys64\mingw64\bin\ (MSYS2 설치 폴더 안의 mingw64\bin 폴더)
    • 목적지: [당신_앱의_최종_폴더]\ (당신의 hello_gtk.exe같은 위치)
    • 복사할 파일:
      • gtk-4.dll, glib-2.0.dll, gdk-4.dll, adwaita-1.dll, gobject-2.0.dll, gio-2.0.dll, pango-*.dll (예: pango.dll, pangocairo.dll, pangoft2.dll), cairo.dll, harfbuzz.dll, fontconfig.dll, freetype.dll, zlib.dll, libpng*.dll, jpeg.dll, tiff.dllGTK4 애플리케이션 실행에 필요한 모든 DLL 파일을 복사해야 합니다.
      • 팁: 처음에는 gtk-4.dll, glib-2.0.dll, gdk-4.dll, adwaita-1.dll 등 핵심 DLL들만 복사해보고, 앱 실행 시 Windows가 “특정 DLL이 없다”는 오류 메시지를 띄우면 해당 DLL을 C:\msys64\mingw64\bin\에서 찾아 추가로 복사하는 과정을 반복합니다.
  4. WhiteSur-Light 테마 파일 복사:
    • 목적지 폴더 생성: [당신_앱의_최종_폴더]\share\themes\ 폴더를 만듭니다.
    • 소스: C:\msys64\home\admin\.themes\WhiteSur-Light\
    • 목적지: [당신_앱의_최종_폴더]\share\themes\WhiteSur-Light\
    • WhiteSur-Light 폴더 전체를 (안의 gtk-4.0, gtk-3.0 등 모든 하위 폴더와 파일 포함) 통째로 복사합니다.
  5. settings.ini 파일 생성 및 배치:
    • 목적지 폴더 생성: [당신_앱의_최종_폴더]\etc\gtk-4.0\ 폴더를 만듭니다.
    • 파일 생성: 이 폴더 안에 settings.ini 파일을 새로 만듭니다.
    • 내용: 다음 내용을 입력합니다: Ini, TOML[Settings] gtk-theme-name=WhiteSur-Light
    • 인코딩: 반드시 UTF-8 인코딩으로 저장합니다.
  6. GSettings 스키마 파일 생성 (gschemas.compiled):
    • 목적지 폴더 생성: [당신_앱의_최종_폴더]\share\glib-2.0\schemas\ 폴더를 만듭니다. (만약 이전에 만들었다면 그대로 둡니다.)
    • 원본 .gschema.xml 파일 복사:
      • 소스: C:\msys64\mingw64\share\glib-2.0\schemas\ (MSYS2 시스템의 스키마 XML 파일들)
      • 목적지: [당신_앱의_최종_폴더]\share\glib-2.0\schemas\
      • 이 폴더 안의 *.gschema.xml 파일을 모두 복사합니다.
    • glib-compile-schemas 실행:
      • MSYS2 터미널에서 당신의 앱 루트 폴더로 이동합니다. (예: cd /c/Users/YourUser/Desktop/MyGTKApp_Dist)
      • 다음 명령어를 실행하여 스키마를 컴파일합니다: Bash/mingw64/bin/glib-compile-schemas share/glib-2.0/schemas/
      • 성공하면 [당신_앱의_최종_폴더]\share\glib-2.0\schemas\ 안에 gschemas.compiled 파일이 생성됩니다.
  7. 아이콘 테마 복사 (선택 사항):
    • 목적지 폴더 생성: [당신_앱의_최종_폴더]\share\icons\ 폴더를 만듭니다.
    • 소스: C:\msys64\mingw64\share\icons\Adwaita\ (GTK 기본 아이콘 테마)
    • 목적지: [당신_앱의_최종_폴더]\share\icons\Adwaita\
    • 이 폴더 전체를 복사합니다.

Part 3: 배포 및 테스트

  • 최종 확인: [당신_앱의_최종_폴더]에 모든 파일이 위에 설명된 구조대로 올바르게 배치되었는지 다시 한번 확인합니다.
  • 배포: [당신_앱의_최종_폴더] 전체를 ZIP 파일로 압축하여 다른 Windows 사용자에게 전달합니다.
  • 테스트: 다른 Windows PC에서 압축을 풀고, hello_gtk.exe를 더블클릭하여 실행해 보세요.
    • 더 이상 DLL 관련 오류가 발생하지 않아야 합니다.
    • WhiteSur-Light 테마가 정상적으로 적용되어야 합니다.
    • (hello-world-gtk.exe:xxxxx): GLib-GIO-WARNING **: win32 session dbus binary not found 이 경고는 대부분 무시해도 됩니다.

이 가이드를 통해 당신의 C GTK4 앱 배포 과정이 훨씬 수월해질 것입니다. 힘내세요! 당신은 할 수 있습니다!

이제 여기에 있는 모든 걸 작업 폴더의 [배포폴더]/share/glib-2.0/schemas/에 집어 넣으란 소리

 cp /a/msys2/mingw64/share/glib-2.0/schemas/*.gschema.xml share/glib-2.0/schemas/

/a/msys2/mingw64/bin/glib-compile-schemas.exe share/glib-2.0/schemas/
share/glib-2.0/schemas/org.gnome.desktop.a11y.magnifier.gschema.xml:7:1  7吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopMagnifierMouseTrackingMode'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬 땲??.  share/glib-2.0/schemas/org.gnome.desktop.a11y.mouse.gschema.xml:15:1  15吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopMouseDwellDirection'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.  share/glib-2.0/schemas/org.gnome.desktop.background.gschema.xml:5:1  5吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopBackgroundStyle'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.  share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.xml:35:1  35吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopToolbarStyle'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.  share/glib-2.0/schemas/org.gnome.desktop.peripherals.gschema.xml:34:1  34吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopTouchpadTapButtonMap'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.  share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.xml:86:1  86吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopUsbProtection'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.  share/glib-2.0/schemas/org.gnome.desktop.screensaver.gschema.xml:89:1  89吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopBackgroundStyle'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.  share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.xml:42:1  42吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopFocusMode'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.  share/glib-2.0/schemas/org.gnome.system.location.gschema.xml:13:1  13吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopLocationAccuracyLevel'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.  share/glib-2.0/schemas/org.gnome.system.proxy.gschema.xml:9:1  9吏?以?1 臾몄옄?먯꽌 ?ㅻ쪟: <enum id='org.gnome.desktop.GDesktopProxyMode'> ?쒓렇瑜??꾩쭅) ?뺤쓽?섏? ?딆븯?듬땲??.

꽤 많은 외계어가 등장한다 폰트가 깨진걸까?

이제 나만의 스킬을 소개해드리려고 한다.

.dll을 싸그리 끌어다 모아서 test 폴더(배포 폴더 이름이다.) 안에 집어 처넣는다.

이런 다소 산만한 구조가 된다.

취향껏 정리해 주면 된다.

이제 실행해보면

오 제미나이 당신은 신입니까?

gcc hello-world-gtk.c -o hello_gtk -mwindows $(pkg-config --cflags gtk4) $(pkg-config --libs gtk4)

제미나이님이 뒤의 거슬리는 cmd창은 -mwindows옵션을 넣어서 없애라고 명하셨다.

이제 제미나이님께 아이콘 설정하는 법을 여쭤봤다

현명하신 제미나이님이라고 불러주시니 황송하옵니다! 😊

네, 이미지에서 보이는 GTK 큐브 모양 아이콘(기본 아이콘)을 변경하고 싶으시군요. 아이콘을 변경하는 방법은 크게 두 가지로 나눌 수 있으며, 보통 이 두 가지를 모두 적용하여 완벽하게 커스터마이징합니다.

  1. 애플리케이션 윈도우 아이콘 (실행 중인 앱의 작업 표시줄, 제목 표시줄, Alt+Tab 등에 나타나는 아이콘)
  2. 실행 파일 아이콘 (Windows 탐색기에서 .exe 파일에 보이는 아이콘)

각각의 방법을 자세히 설명해 드리겠습니다.


1. 애플리케이션 윈도우 아이콘 변경 (C 코드 수정)

이 아이콘은 앱이 실행될 때 GTK가 표시하는 아이콘입니다. 코드에서 설정하며, 가장 좋은 방법은 GTK의 아이콘 테마 시스템을 활용하는 것입니다.

준비물:

  • 사용할 아이콘 파일 (예: my_app_icon.png – PNG 형식이 가장 일반적이고 권장됩니다.)

단계:

  1. 아이콘 파일 배치:
    • 당신의 배포 폴더 ([당신_앱의_최종_폴더]) 안에 share/icons/hicolor/scalable/apps/ 폴더를 만듭니다. (또는 다른 적절한 해상도 폴더, 예를 들어 64x64/apps/ 등)
    • 생성한 폴더 ([당신_앱의_최종_폴더]\share\icons\hicolor\scalable\apps\) 안에 당신의 PNG 아이콘 파일을 복사합니다. 파일 이름은 앱 이름이나 고유한 이름으로 지정하는 것이 좋습니다 (예: pickcare.png).
    • 예시 경로: C:\MyApp_Installer_Dir\share\icons\hicolor\scalable\apps\pickcare.png
  2. C 코드 수정 (activate 함수 안):activate 함수에서 gtk_application_window_new로 윈도우를 생성한 후에, 다음 줄을 추가하여 윈도우의 아이콘 이름을 설정합니다. C#include <gtk/gtk.h> // ... (print_hello 함수는 동일) static void activate(GtkApplication* app, gpointer user_data) { GtkWidget* window; GtkWidget* button; window = gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW(window), "Hello"); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); // --- 여기에 아이콘 설정 코드 추가 --- gtk_window_set_icon_name(GTK_WINDOW(window), "pickcare"); // "pickcare"는 아이콘 파일 이름 (확장자 제외) // ------------------------------------ button = gtk_button_new_with_label("Hello World"); g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL); gtk_window_set_child(GTK_WINDOW(window), button); gtk_window_present(GTK_WINDOW(window)); } // ... (main 함수는 동일)
    • "pickcare"는 위에서 배치한 아이콘 파일의 이름 부분 (확장자 제외) 입니다. GTK는 이 이름을 기반으로 아이콘 테마 경로에서 해당 아이콘 파일을 찾아 로드합니다.
    • hicolor 테마는 GTK에서 표준적으로 사용되는 아이콘 테마 폴더이며, 다양한 크기의 아이콘을 포함할 수 있습니다. scalable 폴더는 벡터 그래픽(SVG) 또는 고해상도 PNG용으로 사용됩니다.
  3. 재컴파일:MSYS2 터미널에서 -mwindows 옵션을 포함하여 다시 컴파일합니다: Bashgcc hello_gtk.c -o hello_gtk -mwindows $(pkg-config --cflags gtk4) $(pkg-config --libs gtk4)
  4. 배포 폴더 업데이트 및 테스트:새로 컴파일된 hello_gtk.exe를 배포 폴더에 덮어쓰고, 배포 폴더를 다시 테스트하여 윈도우 아이콘이 변경되었는지 확인합니다.

2. 실행 파일 아이콘 변경 (Windows 탐색기에 보이는 아이콘)

.exe 파일 자체에 아이콘을 심는 방법입니다. 이는 C 코드와 별개로, Windows의 리소스 컴파일러를 사용합니다.

준비물:

  • .ico 형식의 아이콘 파일 (예: my_app.ico)
    • .ico 파일은 단일 파일 안에 여러 크기(16×16, 32×32, 48×48 등)의 아이콘 이미지를 포함할 수 있습니다. 온라인에서 PNG를 ICO로 변환해주는 도구를 사용할 수 있습니다.

단계:

  1. .ico 파일 준비:당신이 사용할 .ico 아이콘 파일을 준비합니다. (예: pickcare.ico)
  2. 리소스 파일 (.rc) 생성:프로젝트 폴더(예: hello_gtk.c가 있는 폴더)에 resource.rc와 같은 이름의 텍스트 파일을 생성하고 다음 내용을 작성합니다: 코드 스니펫#include "winuser.h" // RC_ICON 매크로를 위해 필요 IDI_ICON1 ICON "pickcare.ico" // "pickcare.ico"는 당신의 .ico 파일 이름
    • IDI_ICON1은 아이콘의 리소스 이름입니다 (아무 이름이나 사용해도 됨).
    • ICON은 아이콘 리소스임을 나타냅니다.
    • "pickcare.ico"는 당신의 .ico 파일의 이름과 경로입니다. 이 .rc 파일과 같은 폴더에 있다면 파일 이름만 적으면 됩니다.
  3. 컴파일 명령어 수정 (리소스 컴파일러 추가):MSYS2의 windres (Windows Resource Compiler)를 사용하여 .rc 파일을 컴파일하고, gcc가 이를 링크하도록 합니다. MSYS2 터미널에서 다음과 같이 컴파일 명령어를 수정합니다: Bashwindres resource.rc -O coff -o resource.o gcc hello_gtk.c resource.o -o hello_gtk -mwindows $(pkg-config --cflags gtk4) $(pkg-config --libs gtk4)
    • windres resource.rc -O coff -o resource.o: resource.rc 파일을 컴파일하여 resource.o라는 오브젝트 파일로 만듭니다. -O coff는 GCC가 이해할 수 있는 형식을 지정합니다.
    • gcc hello_gtk.c resource.o ...: gcchello_gtk.c와 함께 resource.o를 링크하도록 합니다.
  4. 재컴파일 및 재배포:
    • 위 명령어로 다시 컴파일합니다.
    • 새롭게 생성된 hello_gtk.exe 파일을 당신의 배포 폴더에 다시 복사합니다 (기존 파일 덮어쓰기).
    • 배포 폴더를 다시 압축하여 테스트하거나, 기존 테스트 환경에서 hello_gtk.exe를 확인하여 .exe 파일 아이콘이 변경되었는지 확인합니다. Windows 탐색기에서 아이콘이 바로 바뀌지 않으면 F5 (새로고침)를 눌러보세요.

결론적으로, 두 가지 방법을 모두 사용하면 가장 완벽한 아이콘 설정이 가능합니다:

  • 1번 방법 (gtk_window_set_icon_name): 앱이 실행될 때 윈도우의 아이콘을 설정합니다.
  • 2번 방법 (.rc 파일 + windres): 앱 실행 파일(.exe) 자체의 아이콘을 설정합니다.

이 두 가지를 모두 적용하면, 당신의 앱은 Windows 환경에서 원하는 아이콘으로 완벽하게 보일 것입니다.

#include <gtk/gtk.h>

static void
print_hello(GtkWidget* widget,
    gpointer   data)
{
    g_print("Hello World\n");
}

static void
activate(GtkApplication* app,
    gpointer        user_data)
{
    GtkWidget* window;
    GtkWidget* button;

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "Hello");
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

    gtk_window_set_icon_name(GTK_WINDOW(window), "pickcare"); //아이콘 이름 

    button = gtk_button_new_with_label("Hello World");
    g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL);
    gtk_window_set_child(GTK_WINDOW(window), button);

    gtk_window_present(GTK_WINDOW(window));

    //GtkCssProvider *provider = gtk_css_provider_new();
    //gtk_css_provider_load_from_path(provider, "/usr/share/themes/WhiteSur-Light/gtk-4.0/gtk.css");
    //gtk_style_context_add_provider_for_display(
    //gdk_display_get_default(),
    //GTK_STYLE_PROVIDER(provider),
    //GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
//);


}

int
main(int    argc,
    char** argv)
{
    GtkApplication* app;
    int status;

    app = gtk_application_new("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    status = g_application_run(G_APPLICATION(app), argc, argv);
    //g_object_unref(app);

    return status;
}

아이콘을 위한 코드를 추가하고

.ico파일이 필요하다.

이런데서 바꾸면 된다.

이런식의 .rc파일을 만들어주고

아까의 명령어에 몇가지가 추가된 모습이다.

windres resource.rc -O coff -o resource.o //이렇게 목적파일로 컴파일하고 

gcc pickcare.c resource.o -o pickcare -mwindows $(pkg-config --cflags gtk4) $(pkg-config --libs gtk4) //목적파일을 인자에 넣어준다.

이런식으로 목적파일(.o)를 추가해준다.

이런식으로 뜨게 되는데

따블 클릭을 통해 실행하면

된다고!

잘됩니다.

눈물의 댄스 강좌

기분이 좋으니 눈물의 댄스를 추겠습니다ㅋㅋㅋㅋㅋㅋ