디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

다음과 같은 에러가 났다. 어떻게 해결하는 것이 좋겠는가?

나르시갤로그로 이동합니다. 2025.09.27 17:33:34
조회 75 추천 0 댓글 1

이 에러는 GTK 4.18 버전부터 X11 백엔드에 직접 접근하는 함수들이 비권장(deprecated)으로 처리되었고, 컴파일 옵션에 -Werror가 포함되어 경고가 에러로 취급되었기 때문에 발생합니다.

해결책은 GTK의 내장 함수인 gtk_widget_translate_coordinates를 사용하여 X11 종속적인 코드를 제거하는 것입니다. 이 방법은 코드를 간결하게 만들고 Wayland 환경에서도 문제없이 동작하게 해줍니다.


## 문제 원인

GTK4는 특정 윈도우 시스템(X11, Wayland 등)에 종속되지 않는 것을 목표로 합니다. 이 때문에 gdk_x11_display_get_xdisplay gdk_x11_surface_get_xid처럼 X11의 내부적인 Display Window ID에 직접 접근하는 함수들의 사용을 막고 있습니다.

기존 코드의 목적은 위젯의 지역 좌표를 화면 전체의 전역 좌표로 변환하는 것이었는데, 이 작업을 더 이상 X11 함수로 직접 처리해서는 안 됩니다.


## 해결 방안

nimf_gic_set_cursor_pos 함수를 다음과 같이 수정하여 GTK가 제공하는 백엔드 독립적인 방식으로 좌표를 변환할 수 있습니다.

수정 전 코드 (X11 종속)
static void nimf_gic_set_cursor_pos (GtkIMContext* context, GdkRectangle* area)
{
  NimfGic *gic = NIMF_GIC (context);

  GdkRectangle root_area = *area;

  if (gic->client_widget)
  {
    GtkNative *native = gtk_widget_get_native (gic->client_widget);  /* do not free */

    if (native)
    {
#ifdef GDK_WINDOWING_X11

      GdkSurface *surface = gtk_native_get_surface (native); /* do not free */
      GdkDisplay *display = gdk_surface_get_display (surface); /* do not free */

      if (GDK_IS_X11_DISPLAY (display))
      {
        Window          child;
        XWindowAttributes attr;
        Display        *xdisplay = gdk_x11_display_get_xdisplay (display);
        Window          xwin     = gdk_x11_surface_get_xid (surface);

        XGetWindowAttributes (xdisplay, xwin, &attr);

        if (area->x < 0 && area->y < 0)
          XTranslateCoordinates (xdisplay, xwin, attr.root, 0, attr.height,
                                 &root_area.x, &root_area.y, &child);
        else
          XTranslateCoordinates (xdisplay, xwin, attr.root, area->x, area->y,
                                 &root_area.x, &root_area.y, &child);
      }
#endif
    }
  }

  nimf_ic_set_cursor_pos (gic->ic, (const CRect*) &root_area);
}
수정 후 코드 (백엔드 독립)

X11 관련 코드를 모두 제거하고 gtk_widget_translate_coordinates를 사용합니다.

static void nimf_gic_set_cursor_pos (GtkIMContext* context, GdkRectangle* area)
{
  NimfGic *gic = NIMF_GIC (context);
  GdkRectangle root_area = *area;

  if (gic->client_widget)
  {
    // 위젯의 최상위 창(Toplevel window)을 가져옵니다.
    GtkWidget *toplevel = gtk_widget_get_ancestor (gic->client_widget, GTK_TYPE_WINDOW);

    if (toplevel)
    {
      double dest_x, dest_y;

      // client_widget의 좌표를 toplevel 창의 좌표로 변환합니다.
      gtk_widget_translate_coordinates (gic->client_widget,
                                        toplevel,
                                        (double) area->x,
                                        (double) area->y,
                                        &dest_x,
                                        &dest_y);

      // 변환된 좌표는 toplevel 창 내에서의 상대 좌표이므로,
      // toplevel 창의 위치를 더해주어 화면 전체의 절대 좌표를 구합니다.
      int win_x, win_y;
      GtkNative* native = gtk_widget_get_native (toplevel);
      GdkSurface* surface = gtk_native_get_surface (native);
      gdk_surface_get_root_coords (surface, 0, 0, &win_x, &win_y);
      
      root_area.x = win_x + (int) dest_x;
      root_area.y = win_y + (int) dest_y;
    }
  }

  nimf_ic_set_cursor_pos (gic->ic, (const CRect*) &root_area);
}

## 수정된 코드의 장점

  • 백엔드 독립성: 이 코드는 X11과 Wayland 모두에서 수정 없이 동일하게 동작합니다. ?+
  • 코드 간결성: 복잡한 #ifdef 전처리기와 Xlib 함수 호출이 사라지고 간결한 GTK API 호출로 대체됩니다.
  • 미래 호환성: GTK가 권장하는 최신 API를 사용하므로 앞으로의 GTK 버전에서도 안정적으로 작동할 가능성이 높습니다.


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 공개연애가 득보다 실인 것 같은 스타는? 운영자 25/10/06 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
2894221 저학력 거지들은 한국 트래픽 요금이 얼마나 비싼지 알기나 하나 프갤러(211.234) 10.05 49 0
2894220 1억짜리 위스키를 친구랑 반반 나눠먹으면 상속세내야함ㅇㅅㅇ?? ㅇㅇ(223.38) 10.05 26 0
2894218 데이터 복구 답 없냐? [3] 넥도리아2025(220.74) 10.05 52 0
2894217 저학력 거지들이 부자 빨아줘서 쉽게 돈 해처먹게 해주면 [3] 프갤러(211.234) 10.05 52 0
2894215 자라나는새싹들만봐도 알수있잖누 ㅋㅋㅋㅋㅋ 타이밍뒷.통수한방(1.213) 10.05 43 0
2894213 뭐 나라 망하는데 이유가 있나 [1] ㅇㅇ(49.165) 10.05 52 0
2894205 SATA 핀 넥도리아2025(220.74) 10.05 26 0
2894203 소자 라이터 모드 신세계 따라하지 마삼. 깨비참 이시면 안됨. 넥도리아2025(220.74) 10.05 31 0
2894202 시발 북쪽엔 김정은 있고 남쪽엔 섹스톤 이재명 문재인 보유국가 타이밍뒷.통수한방(1.213) 10.05 47 0
2894201 요새 간간히 레딧에 글 쓰고 있어요 나르시갤로그로 이동합니다. 10.05 35 0
2894200 프갤에서 제발 정치 얘기 좀 하자 말자 [4] 나르시갤로그로 이동합니다. 10.05 65 0
2894199 즐츄⭐+ ♥덩냥이♥갤로그로 이동합니다. 10.05 34 0
2894198 52시간 제한 때문에 500~600 벌수 있는 공장도 나르시갤로그로 이동합니다. 10.05 54 0
2894197 1억 모으기 얼마나 좋은 시대인데 ㅋㅋ 나르시갤로그로 이동합니다. 10.05 45 0
2894196 boji.js 언제 나오냐? [1] 헬마스터갤로그로 이동합니다. 10.05 48 0
2894195 왜 별것아닌 불꽃놀이에 열광했는지 이제야 알겠다 [4] 헬마스터갤로그로 이동합니다. 10.05 54 0
2894194 진짜 기자 이진숙의 종군기자 시절 깡따구 [1] ♥덩냥이♥갤로그로 이동합니다. 10.05 81 1
2894193 뭔가 캐릭터 이동할때 [12] 루도그담당(118.235) 10.05 83 0
2894191 연휴때 뭐하나 뵜더니 [1] ㅇㅇ(211.235) 10.05 59 1
2894187 그럼 난 진수다 ㅇㅇ(121.168) 10.05 51 0
2894186 한국은 정치 체계 분류는 '약제도화'라고 봐야해 [6] ㅆㅇㅆ(124.216) 10.05 96 0
2894185 사실 민주당이 보수긴 해. 일베 정당은 정당이라기보단 [2] 프갤러(110.8) 10.05 71 0
2894184 하루 벌어서 이틀 먹고 싶다..ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 10.05 57 0
2894183 그리고 민주당은 한국 정치 사학회에서 5년전부터 보수분류임 [2] ㅆㅇㅆ(124.216) 10.05 72 0
2894182 민주당은 보수 정권이지 정확히 진보 정권은 아니긴함. ㅆㅇㅆ(124.216) 10.05 66 0
2894181 저학력 거지 일베가 보수 지지하는 심리 딱 한줄로 표현 [1] 프갤러(110.8) 10.05 58 0
2894180 가난할수록 보수가 많긴함. 부모 학력이 높을수록 진보고 [20] ㅆㅇㅆ(124.216) 10.05 118 0
2894179 판교에서 일하는데 얼마정도 벌면 자취 가능? 프갤러(1.237) 10.05 60 0
2894178 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥덩냥이♥갤로그로 이동합니다. 10.05 34 0
2894177 전라도 광주도 뚫렸다 납치 인신매매 장기적출 의심사건 [2] ♥덩냥이♥갤로그로 이동합니다. 10.05 94 0
2894176 가을..냇가.ㅇㅅㅇ [3] 헤르 미온느갤로그로 이동합니다. 10.05 45 0
2894175 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 10.05 38 0
2894174 하루 한 번 헤르미온느 찬양 [2] 헤르 미온느갤로그로 이동합니다. 10.05 57 0
2894173 5시간만 기다리면 사이카 품번이 받아진다. 뻐기는자가 이긴다. 넥도리아2025(220.74) 10.05 44 0
2894171 민주주의가 먼저다 ㅇㅇ(121.168) 10.05 43 0
2894169 Ai에게 소스코드 지적받는 놈들 [2] 응게이(211.235) 10.05 86 0
2894165 사이카 받는데 8시간 ... 넥도리아2025(220.74) 10.05 30 0
2894163 이재용 상속세 탈세했던 한국의 디즈니랜드 근황 [1] 발명도둑잡기(118.216) 10.05 118 0
2894162 야동 사이카 야동 다운 받는데 7시간~10시간 남았데... 넥도리아2025(220.74) 10.05 40 0
2894160 섬나라의 기상 [1] 발명도둑잡기(118.216) 10.05 49 0
2894157 중국 러시아가 민주화 되면 좋겠어 ㅇㅇ(39.7) 10.05 45 0
2894155 자위하면서 소리들으면 엄청 혼란 옴. 넥도리아2025(220.74) 10.05 61 0
2894154 일본 여자 친구 사이카가 너무 좋아서 매일 동영상 보고 있어요. 지금ㅏ도 넥도리아2025(220.74) 10.05 58 0
2894153 일본은 여자 총리 시대네 ㅇㅇ(39.7) 10.05 55 1
2894149 결국 닌텐도 강화유리 필름에 굴복한 남자. 넥도리아2025(220.74) 10.05 41 0
2894147 10일간 엄마없는 집에 살며 참 많은 것을 느꼈다... [4] ㅇㅇ(223.38) 10.05 93 1
2894131 음기 충전 발명도둑잡기(118.216) 10.05 67 0
2894130 나도 잘하고싶다 [2] 루도그담당(118.235) 10.05 66 0
2894129 나는 내가 실력있다 생각함 [2] ㅆㅇㅆ(124.216) 10.05 90 0
2894127 LG G5 샀다. 액정. H850 no frame으로... 넥도리아2025(220.74) 10.05 40 0
뉴스 박보영, 뽀블리 볼하트 ~ (황금촬영상 시상식) 디시트렌드 10.07
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2