07/02/03 08:37:48 yTpUnzEZ
gtk+2.0でボタンwidgetとlabel widgetを 生成・消去(destroy)を繰り返し
て走らせておくと徐々にメモリを食いつぶしているようにみえるんですが…
そう言うのを確認した人いますか? もし居たら対策は?
858:login:Penguin
07/02/05 21:07:30 YgSmvrHE BE:102858252-2BP(0)
>>857
memprof とか valgrind 使って本当にメモリリークしてるか確かめてみて
859:login:Penguin
07/02/05 21:39:19 4W+LgzvZ
>>857
やってみたけどシステムモニター眺めてわかる程のリークはしてないように見えるが。
#include <gtk/gtk.h>
int
main(int argc, char *argv[])
{
gint i;
GtkWidget *box;
gtk_init(&argc, &argv);
box = gtk_vbox_new(FALSE, 0);
for(i = 0; i<1000000; i++){
GtkWidget *label = gtk_label_new("label");
GtkWidget *button = gtk_button_new();
gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
gtk_widget_destroy(GTK_WIDGET(label));
gtk_widget_destroy(GTK_WIDGET(button));
}
return 0;
}
860:login:Penguin
07/02/05 23:38:43 jQ+mHrDJ
デストローイ忘れしてるだけなんじゃねーの
861:login:Penguin
07/02/06 05:25:55 goDIpkB2
単にキャッシュなだけじゃないの?(参考: URLリンク(www.gtk.org))
俺も前に気になった事があるけど「食い潰す」まで行く事は無いし
最終的には解放されるからもう気にしてない。
862:login:Penguin
07/02/08 03:13:47 678pSSYu
>>857
URLリンク(developer.gnome.org)
の 1.5 とか。これは俺も最近まで知らなんだ…。
863:login:Penguin
07/02/10 07:26:44 3Xia/9JA
チュートリアルのrulers.cを改造して、ウインドウサイズを変更したときにルーラの目盛りも
更新するようにしたいんだけど、drawing_areaはサイズを取得出来ない・・・よね?
かといってgtk_window_get_size(window, w,h);だと全体の窓サイズになってしまうし
どうすればいいですか。
864:login:Penguin
07/02/10 09:06:07 cB1+Mmyj
>>863
drawing_area の configure-event 見ればいんじゃね?
865:login:Penguin
07/02/10 18:25:05 3Xia/9JA
朝からずっと調べ続けて今ようやくわかった・・・。
expose_event で GdkEventExpose から area を参照するのね。
866:login:Penguin
07/02/14 09:42:58 BwmsCoUm
ファイラのようなファイルの mime タイプに応じたアイコンが並んでいるリストを作りたいんですが、
どうしたらいいんでしょうか。
手がかりだけでもかまわないので、ご教授お願いします。
867:login:Penguin
07/02/15 02:32:20 l0yfSnwW
GtkIconViewを使えって話じゃないのかな? ファイラってのがよくわからんが。
(Windowsの explorerはいつも「詳細」にして使ってるんで)。
mime-typeに応じたアイコンを取得したいってのなら、知らん。
まず、やりたいことを分割して曖昧じゃない日本語で箇条書きにして、
必要度、依存関係を書いて提示しろ。
できればこんなところに質問しないか。
868:login:Penguin
07/02/16 17:15:53 zsLloLAV
Explorerを詳細表示にして使ったところで、ファイル名の左側に
拡張子に応じたアイコンが表示されてるじゃん。
869:login:Penguin
07/02/17 15:44:53 fKE+Jy3+
たとえば、firefox で実装されているように、
* あるアプリケーションがすでに実行されていた場合は新しくタブでドキュメントを開く
* そうでなければ、新しいウインドウでドキュメントを開く
という動作を実行するのには、どういう仕掛けを使うのが一般的なのでしょうか?
870:login:Penguin
07/02/17 16:43:58 KR0sG7u1 BE:253234144-2BP(0)
>>869
1. プログラムを起動したときに別のインスタンスがいないかどうか確認
2. インスタンスがいたときにはそいつにメッセージ(Firefoxの場合ドキュメントのURLかな)を渡して自分自身は終了
ってことでいいかな?結局多重起動のチェックとプロセス間通信がやれればいいのね。
SylpheedではUNIXドメインソケットで1,2をやってるみたい。
Gtk+周辺のテクノロジで固めたいならD-BUSを使ってもいいかも
871:login:Penguin
07/02/17 18:22:53 CMTL+Fmk
>>870は同じホストしか考えないプログラムの場合の一般論であって、
Xの場合はとるべき手段が違ってくる。
netscapeはXプロパティ経由で通信するので、同じスクリーンにウィンドウが
開いていればプロセス自体は別のマシンでも通信できる。
firefoxも同じ。
GDK/GTK+にXプロパティなんかのラッパーがあるかどうかは知らない。
それで見付からないなら諦めるもよしプロセスを起動するもよし、で
起動するのならば、通常のプログラム同様データファイルの一貫性保護
などを目的としてロックファイルなどによる多重起動チェックをやればいい。
872:login:Penguin
07/02/19 23:16:35 5FZGim03
>>869
とりあえずこれ読んでみたら?
GTK+だけで実装しているっぽい。
URLリンク(gtklab.sourceforge.jp)
873:login:Penguin
07/02/20 08:11:40 ONtjkv3E
ウィンドウを作らないとチェックできないのがちょっと嫌かも。
あと既に動いてるプロセスがサスペンドされたりしてたら
それが復活するまで判定が終了しないんじゃね。
874:login:Penguin
07/02/22 15:48:43 jpFFYqu/
GTK 1.2から2.0に切り替えたら、XTestライブラリが使えなくなっちゃたんですが。
linkでエラーになります。(Undefined reference `XTestQueryExtension`)
知ってる方いましたらお願いします。
ディストリ Vine4.0
gtk2-2.4.13
分からないので、XTestをやめてXSendEvent()とかを使って書き直してます。
875:login:Penguin
07/02/22 18:24:28 ARkHAdB3
単に-lXtstをGTKがリンクしなくなっただけでは。
876:login:Penguin
07/02/23 09:24:50 Toss6a7K
>>875
うまくlink出来ました。ありがとうございました。
877:login:Penguin
07/02/24 17:34:31 M/6/J6Qq
gtk1のソースをgtk2に変更するツールはありますか?
878:login:Penguin
07/02/24 17:40:30 R3/FZlN8
なんでも「ツール」と呼べば済むと思ってるんじゃねーぞ。
そういう奴が女性を産む機械だとか抜かすんだ。
879:login:Penguin
07/02/24 18:49:12 M/6/J6Qq
gtk1のソースをgtk2に変更するスクリプトはありますか?
880:login:Penguin
07/02/24 20:15:03 tree4KTM
スクリプトキディおつ
えーと、あれだ。ない。
881:login:Penguin
07/02/24 20:31:22 Z7G0MF3p
>>878を女性を産む、機械と読んでエロゲーとか思ったのはおれだけじゃないはずwwwwwww
882:login:Penguin
07/02/25 16:21:18 jPY2U1RH
あるウィジットの大きさを一定以上に広がらないようにしたいのですが、どうするのが正解ですか?
883:login:Penguin
07/02/25 20:12:20 xIfK6WPJ
いつもGladeで設定しちゃってる。
884:login:Penguin
07/02/26 18:41:50 pt8OB6ru
前から思ってたんだが、なんでみんなlibglade使わないの?
便利なのに……
885:login:Penguin
07/02/26 19:58:31 uj4cgUSY
ライブラリ依存がどんどん激しくなるよね。
C++なんか使ってたら、hohogemmなんてリンクするものがどんどん増えていく。
ああいうの一つにまとめて標準で入れておいてくれたらもっと楽なんだけどなあ。
886:login:Penguin
07/03/03 08:59:18 iO4b+0oy
Windows での話しなのですが、GtkTextView を作った時に同時に日本語入力を
オンにすることってできますか?
input method 関係を探したんですが、どうも見つからなくて…
887:login:Penguin
07/03/04 07:57:59 gI/IeUsG
それってGTK側でやる仕事なのかなぁ。
ちょろっと調べただけだけど、ImmGetConversionStatus()でIMEの状態を調べて
keybd_event()でVK_KANJIじゃない?win32apiの範疇だと思うけどな。
888:login:Penguin
07/03/05 13:11:27 n32uogVx
>>887
どうもありがとうございます。
考えてみれば Windows の API でやるのが正しいですね。
書き込みして気づきました。
ありがとうございました。
889:886
07/03/06 02:47:16 rlQdCBer
GTK とは関係なくなってしまいましたが、
URLリンク(www.cam.hi-ho.ne.jp)
に書いてありました。ここの SetInputMethodOpenStatus() がそのまま使えました。
お手数おかけしました。
890:login:Penguin
07/03/11 10:56:27 bVyF8jVB
>889
そこにあるコードは著作物なのだが。
891:login:Penguin
07/03/11 22:40:07 RO7bywIf
>>890
これを見るとrpmコマンド叩くにも>>889のリンク先に許可を求めないといけなくなるんだよね。
著作物だし。
892:login:Penguin
07/03/12 09:27:43 slT8Ay77
gtk_window_new() でwindow生成後に、最小化してwindowを隠すにはどうすればいいんでしょうか?
教えてください m(_ _)m
893:login:Penguin
07/03/12 12:04:53 WX8P/QrK
gtk_window_iconify()
てかマニュアルぐらい読め
894:login:Penguin
07/03/12 15:37:48 slT8Ay77
>>893
ありがとうございます。m(_ _)m
895:886
07/03/14 00:53:00 LNXDqswG
>> 890
結局必要なのは ImmSetOpenStatus() ぐらいなものなので、
#include <gdk/gdkwin32.h>
void
ImmSetStatus(GtkWidget *widget, ImmStatus status)
{
HWND hWnd = (HWND) GDK_WINDOW_HWND(widget->window);
HIMC hIMC = ImmGetContext(hWnd);
/* Set IMMM status */
ImmSetOpenStatus(hIMC, (status == IMM_ON));
/* Release context */
ImmReleaseContext(hWnd, hIMC);
}
ってしたよーん。ってほとんど GTK と関係ないっすね。
896:login:Penguin
07/03/19 02:53:53 IBwC1/nU
せっかくGTK使ってるのにプラットフォーム依存にしてしまうの?
897:login:Penguin
07/03/20 00:43:22 SW3xr29J
MinGWでgtkを勉強してるんですが、プログラムを実行するときに、
syntax error near unexpected token `main('
と出てきて、
プログラムが強制終了してしまうんですが、誰か対処法を知っていたら教えて下さい。
コンパイルは一応通ってるとは思うんですけど・・・・・。
898:login:Penguin
07/03/20 02:09:03 pOTrHDbj
とりあえずソースを晒すといいかも
899:login:Penguin
07/03/20 04:42:36 yYm494xv
GTK以前に hello worldとかを compile & 実行できているかが気になる。
900:login:Penguin
07/03/20 16:13:54 SW3xr29J
>>898
エラーがで出てたのは、このウィジェットだけを配置する
プログラムなんですが、
#include <gtk/gtk.h>
int main(int argc,
char *argv[])
{
GtkWidget *window;
GtkWidget *button1;
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *button4;
GtkWidget *button5;
GtkWidget *table;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
table = gtk_table_new(10,10,FALSE);
gtk_container_add(GTK_CONTAINER(window),table);
button1 = gtk_button_new_with_label("BTN1");
button2 = gtk_button_new_with_label("BTN2");
button3 = gtk_button_new_with_label("BTN3");
button4 = gtk_button_new_with_label("BTN4");
button5 = gtk_button_new_with_label("BTN5");
//前半
901:login:Penguin
07/03/20 16:15:20 SW3xr29J
//後半
button1 = gtk_button_new_with_label("BTN1");
button2 = gtk_button_new_with_label("BTN2");
button3 = gtk_button_new_with_label("BTN3");
button4 = gtk_button_new_with_label("BTN4");
button5 = gtk_button_new_with_label("BTN5");
gtk_table_attach_defaults(GTK_TABLE(table),button1,0,2,0,10);
gtk_table_attach_defaults(GTK_TABLE(table),button2,2,4,0,10);
gtk_table_attach_defaults(GTK_TABLE(table),button3,4,6,0,1 );
gtk_table_attach_defaults(GTK_TABLE(table),button4,6,8,1,2 );
gtk_table_attach_defaults(GTK_TABLE(table),button3,8,10,2,3);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
902:login:Penguin
07/03/20 16:16:54 SW3xr29J
>>899
不安になってやってみたら「hello, world」も同じエラーがでてきてできませんでした..orz。
#include<stdio.h>
int main() {
printf("hello, world");
return 0;
}
gtk+ チュートリアルのへろーわーるどは実行できるんですけど、
プログラムが終わると同じエラーがでてきます。
ぐぐったら、文字コードが関係してるらしいんですが、どれでやってもダメでした。
LINUXでやれっていうことなんですかね............。
903:login:Penguin
07/03/20 16:56:26 u2b4TE2D
mingwをインストールしなおせ
904:login:Penguin
07/03/21 03:54:17 Ay+CzKM3
>>872
今更だけど、URLリンク(gtklab.sourceforge.jp) の方法だけど
Win ではうまくいかなかった。
なので普通に Win API を使うしかなかった。
>>902
俺は URLリンク(gladewin32.sourceforge.net) の GTK ライブラリ使ってるけど、
問題なかったよ。
905:login:Penguin
07/03/21 15:08:14 mdl7DVyg
>>897
syntax error near unexpected token `main('
これは実行時ではなくてコンパイル時のエラーメッセージではないのか。
906:login:Penguin
07/03/21 15:33:43 h4G4UgJx
あのね、ここはLinux板でしてね
win32-portのことならム板にスレがあるからそっちに行ってほしいんだ
907:login:Penguin
07/03/21 15:44:01 OzGdWDRq
>>904
WindowsではWindowsのAPIを使うのが正解かもね。
その文書を書いた人が公開しているプログラムでもそうしてるみたい。
URLリンク(cvs.sourceforge.jp)
908:login:Penguin
07/03/22 06:20:18 nC3vS/QI
>>906
ム板には無いような気がするなぁ。
マイナーGUITKを「紹介するだけ」のスレはあるようだけど。
見落としてる?
909:login:Penguin
07/03/22 08:16:50 P6YXu+FN
>>908
GTKやめて、FOX Toolkitで作るといいよ
910:login:Penguin
07/03/22 11:05:43 nC3vS/QI
>>909
突然、何?
なにかが気に障ったなら謝るよ。ゴメンナ。
911:login:Penguin
07/03/22 17:19:08 NVYlVu8k
>>904
>>906が言ってるのはここの事では。
Gtkプログラミング on Windows!!!
スレリンク(tech板)
912:login:Penguin
07/03/22 18:01:50 oCFS6K5y
>>900
int main(int argc,
char *argv[])
を
gint main(gint argc,gchar *argv[])に変えてみろ
913:login:Penguin
07/03/29 16:50:34 dC+/1rKX
GTKのwidgetにMozillaをのっけてアプリケーションを作った人いますか?
不具合とかあったら教えてください!
914:login:Penguin
07/04/01 02:44:59 RjtNty3y
すいません、質問させてください。文字を90度回転させるにはどうしたらいいですか?
915:login:Penguin
07/04/03 01:42:21 99UCu54W
ついに、自前の C++ マーシャラーを作成して、シグナルにコネクトできるようになったぜ!
こんな感じ。
class Test
{
public:
Test() : dummy(123) { }
void hello (GtkWidget *widget, gpointer data);
private:
int dummy;
};
void
Test::hello (GtkWidget *widget, gpointer data)
{
g_print ("Hello World C++ %d\n", dummy);
}
g_signal_connect_cc (button1, "clicked", &test, &Test::hello, 0);
これで、button1をクリックすると、
Hello World C++ 123
と出力される。v(^O^)v
素の GTK+ を使いつつ C++ でプログラム出来るのはかなりおいしい。
916:login:Penguin
07/04/03 05:09:44 EaZCa4Le
>>914
GTKをインストールした時についてくる gtk-demo で、
Rotated Text というのがあるので、それを見たらいいと思う。
gtk-demoでソースも見れるよ。
917:login:Penguin
07/04/03 19:04:41 YnFjw9iH
>>915
あ、それよさげ。
全体としてはC++でコーディングしたいけど、GTK+周りは初心者なので
素のCでやりたいと思ってた。gtkmmとか使うのも考えたけど、本家(?)の
GTK+の方が情報揃ってそうだったし。
918:915
07/04/04 03:16:21 4cUWSG/i
こんな時間になったけど、めげずにカキコ。
GTK+ が他のツールキットと違うのは、コールバック関数を呼び出す際に、
引数をスタックに積まないで、ヒープに型情報と共に保存して、
シグナルに登録されたマーシャラーを呼び出す。
呼び出されたマーシャラーは、データを取り出して、コールバック関数に
合った方法で引数に変換して、コールバック関数を呼び出す。
というところまで分かったんで、だったら、C++ のメソッドを呼び出せる
ように出来るんじゃないかと思ったのがきっかけ。
gtkmm を使いたくないのが一番の理由だけどw
とりあえず、これからブログを開設するんでwwwそっちに載せるつもり。
919:914
07/04/04 20:46:07 fydXVgVP
>>916
情報ありがとうございますm(_;_)m
gdkのpangoインターフェースというのがあるんですね。
(でも2.6からみたいなので拙の2.4ではだめかも…)
920:login:Penguin
07/04/12 18:45:31 AmiOQVwy
textviewについて質問です
表示行数を増やしたときに、その新しい行が見えるように、一番下までスクロールすることにしました。
text_buffer_insertして
end_iterにscroll_to_iterしています。
しかし、これを実行しても、最後の行までスクロールされません
最後のカーソルがひとつあるだけの行と、その上の行が見えません(つまり、こちらの意図より2行うえにずれてる)
もちろん、スクロールバーも、下がちょびっと残っていて、一番したまでぴったり動きません
テキストビューを一番下までスクロールする方法を教えてください