gtk_widget_grab_focus(widget);
23.4.2. Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π²ΠΈΠ΄ΠΆΠΈΡΠΎΠ², ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π° ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ
ΠΠ»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ (ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ) Π²ΠΈΠ΄ΠΆΠΈΡΠ° Π² ΠΎΠΊΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π²ΠΈΠ΄Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ Π²ΠΈΠ΄ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠ°ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° GtkBin, Π° Π²ΡΠΎΡΠΎΠΉ β ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° GtkContainer. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ΠΆΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²: ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΡΠ°ΠΌΠΊΠΈ, ΠΎΠΊΠ½Π°.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π²ΡΠΎΡΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Ρ β ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠΈΡΠΎΠ². Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ:
β¦ GtkHBox β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π²ΠΈΠ΄ΠΆΠΈΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ;
β¦ GtkVBox β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠΈΡΠΎΠ²;
β¦ GtkFixed β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π²ΠΈΠ΄ΠΆΠΈΡΡ Π² ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ ;
β¦ GtkTable β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ Π²ΠΈΠ΄ΠΆΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ°Π±Π»ΠΈΡΡ.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΄Π°ΡΠ½ΡΠΌ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ GtkTable, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ. GtkTable ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΡΠΏΠ΅Ρ ΠΎΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΠΉ, ΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ β ΡΡΠΎ Π½Π°ΠΌ ΡΡΠΎΠΈΡ Π·Π°Π΄Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ, ΡΠΎΡΡΠΎΡΡΡΡ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ»Π±ΡΠ°?
ΠΡΠΎΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° GtkTable, Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ:
β¦ ΠΏΠΎΠ»Ρ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ;
β¦ ΠΊΠ½ΠΎΠΏΠΊΠΈ;
β¦ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄.
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ» /etc/resolv.conf. ΠΠ°ΠΏΠΎΠΌΠ½Ρ Π²Π°ΠΌ ΡΠΎΡΠΌΠ°Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
domain firma.ru
nameserver 192.168.0.1
nameserver 192.168.0.2
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° domain ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°Ρ Π΄ΠΎΠΌΠ΅Π½, Π° Π΄Π²Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ nameserver β ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ Π²ΡΠΎΡΠΎΠΉ DNS-ΡΠ΅ΡΠ²Π΅ΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΎΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΡΠ°ΠΉΠ» /etc/resolv.conf β Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½Ρ ΠΏΡΠ°Π²Π° ΡΡΠΏΠ΅ΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠΎΠΌ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» resolv.conf, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ /etc.
ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ 23.2 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. Π Π°Π±ΠΎΡΠ°Π΅Ρ ΠΎΠ½Π° ΡΠ°ΠΊ. ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅Π΄Π΅Ρ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΈ Π½Π°ΠΆΠΌΠ΅Ρ Enter, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΈΠΌ ΡΠ΅ΠΊΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΌΠ΅Ρ OK, Π²Π²Π΅Π΄Π΅Π½Π½Π°Ρ ΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π΅ΡΠ΅ ΡΠ°Π· Π²ΡΠ²Π΅Π΄Π΅Π½Π° Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΈ Π·Π°ΠΏΠΈΡΠ°Π½Π° Π² ΡΠ°ΠΉΠ». ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Quit ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π·Π°ΠΊΡΡΡΠΈΡ ΠΎΠΊΠ½Π° β Π² GTK ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΡΠ°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ΅Π°ΠΊΡΠΈΠΈ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ.
Π ΠΈΡ. 23.3. Π£ΡΠ΅Π±Π½ΡΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΎΡ
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠΈΡΡΠ½ΠΊΠ°, Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ ΡΡΠΈ ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π°, ΡΡΠΈ Π½Π°Π΄ΠΏΠΈΡΠΈ ΠΈ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Ρ ΡΠ°Π½ΠΈΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅:
GtkWidget *edit[3];
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Π΅ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_entry_new():
edit[i] = gtk_entry_new();
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ»Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ gtk_entry_set_editable(), ΠΈΠ½Π°ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π²Π²Π΅ΡΡΠΈ Π² ΡΡΠΎ ΠΏΠΎΠ»Π΅.
gtk_entry_set_editable(GTK_ENTRY(edit[i]), 1);
ΠΡ ΠΈ, ΡΠ°ΠΌΠΎ ΡΠΎΠ±ΠΎΠΉ ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ Enter β ΡΠΈΠ³Π½Π°Π» activate:
gtk_signal_connect(GTK_OBJECT(edit[i]), "activate",
GTK_SIGNAL_FUNC(enter_callback), edit[i]);
ΠΠ΅ΡΡΠΌΠ° ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΠΈΠ΄Π΅ΡΡ Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ enter_callback(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΠ»Π° Π±Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎΠ»Ρ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ. ΠΠΎΠ»ΡΡΠΈΡΡ Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ:
domain = gtk_entry_get_text(GTK_ENTRY(edit[0]));
dns1 = gtk_entry_get_text(GTK_ENTRY(edit[1]));
dns2 = gtk_entry_get_text(GTK_ENTRY(edit[2]))?
Π Π΅Π°ΠΊΡΠΈΡ Π½Π° Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ OK Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ:
void writetofile(GtkWidget *widget, gpointer data) {
/* Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_entry_get_text() ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ
Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° */
domain = gtk_entry_get_text(GTK_ENTRY(edit[0]));
dns1 = gtk_entry_get_text(GTK_ENTRY(edit[1]));
dns2 = gtk_entry_get_text(GTK_ENTRY(edit[2]));
/* ΠΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ */
g_print("Domain %s\n", domain);
g_print("DNS1 %s\n", dns1);
g_print("DNS2 %s\n", dns2);
/* ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ» resolv.conf Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ */
if ((resolv = fopen("resolv.conf","w")) == NULL) {
/* ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, Π½Π΅Ρ ΠΌΠ΅ΡΡΠ° Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠ°Π² ΠΌΠ°Π»ΠΎΠ²Π°ΡΠΎ... */
g_print("ERR: Cannot open resolve.conf file\n");
gtk_main_quit();
}
/* ΠΠ°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» */
fprintf(resolv,"domain %s\n",domain);
fprintf(resolv, "nameserver %s\n",dns1);
fprintf(resolv,"nameserver %s\n*,dns2);
fclose(resolv);
}
ΠΡΠ»ΠΈ Π²Π°ΡΠ΅ ΠΎΠΊΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ, ΡΠΎ Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²Π°ΠΌ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΡΠ°ΠΊ: ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π·Π°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π΄ΠΏΠΈΡΡ, ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π·Π°ΡΠ΅ΠΌ ΠΎΠΏΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π΄ΠΏΠΈΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ Ρ.Π΄. ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
label = gtk_label_new("Domain: ");
gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
gtk_widget_show(label);
label = gtk_label_new("DNS #1; ");
gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
gtk_widget_show (label);
label = gtk_label_new("DNS #2: ");
gtk_table_attach_defaults (GTK_TABLE(table), label, 0, 1, 2, 3);
gtk_widget_show (label);
ΠΠΈΡΡΠΈΠ½Π³ 23.6 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΎΡΠ° Resolver.
ΠΠΈΡΡΠΈΠ½Π³ 23.6. Π€Π°ΠΉΠ» resolver.c
#include <gtk/gtk.h>
#include <stdlib.h>
#include <stdio.h>
gchar *domain, *dns1, *dns2;
/* ΠΠ°ΡΡΠΈΠ² ΠΈΠ· ΡΡΠ΅Ρ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π°. ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ
Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅Π½Π°, Π΄Π²Π° Π²ΡΠΎΡΡΡ - [1] ΠΈ [2] - Π΄Π»Ρ Π²Π²ΠΎΠ΄Π°
IP-Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² DNS */
GtkWidget *edit[3];
/* ΠΠ°Ρ ΡΠ°ΠΉΠ» */
FILE *resolv;
/* Π€ΡΠ½ΠΊΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°ΠΉΠ» */
void writetofile(GtkWidget *widget, gpointer data) {
/* Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_entry_get_text() ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ
Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° */
domain = gtk_entry_get_text(GTK_ENTRY(edit[0]));
dns1 = gtk_entry_get_text(GTK_ENTRY(edit[1]));
dns2 = gtk_entry_get_text(GTK_ENTRY(edit[2]));
/* ΠΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ */
g_print("Domain %s\n", domain);
g_print("DNS1 %s\n", dns1);
g_print("DNS2 %s\n", dns2);
/* ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ» resolv.conf Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ */
if ((resolv = fopen("resolv.conf","w")) == NULL) {
/* ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, Π½Π΅Ρ ΠΌΠ΅ΡΡΠ° Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠ°Π² ΠΌΠ°Π»ΠΎΠ²Π°ΡΠΎ... */
g_print("ERR: Cannot open resolve.conf file\n");
gtk_main_quit();
}
/* ΠΠ°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» */
fprintf(resolv,"domain %s\n",domain);
fprintf(resolv,"nameserver %s\n",dns1);
fprintf(resolv,"nameserver %s\n",dns2);
fclose(resolv);
}
/* ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΌΠ΅Ρ
ΠΊΠ½ΠΎΠΏΠΊΡ Π·Π°ΠΊΡΡΡΠΈΡ ΠΎΠΊΠ½Π° ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡ Quit */
gint delete_event(GtkWidget *widget, GdkEvent *event,
gpointer data) {
/* Π€ΡΠ½ΠΊΡΠΈΡ gtk_main_quit() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ
ΡΠ°Π±ΠΎΡΡ GTK-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΅ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
exit() */
gtk_main_quit();
return(FALSE);
}
/* ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅Π΄Π΅Ρ ΡΠ΅ΠΊΡΡ ΠΈ Π½Π°ΠΆΠΌΠ΅Ρ Enter,
Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΈΠΌ ΡΠ΅ΠΊΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ */
void enter_callback(GtkWidget *widget,
GtkWidget *entry) {
domain = gtk_entry_get_text(GTK_ENTRY(entry));
printf("Domain: %s\n", domain);
}
int main(int argc, char *argv[]) {
GtkWidget *window; /* ΠΠΊΠ½ΠΎ */
GtkWidget *button; /* ΠΠ½ΠΎΠΏΠΊΠ° */
GtkWidget *table; /* Π’Π°Π±Π»ΠΈΡΠ° Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠΈΡΠΎΠ² */
GtkWidget *label; /* ΠΠ°Π΄ΠΏΠΈΡΡ */
/* ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π²ΡΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° β GtkWidget,
ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π΄Π°ΠΆΠ΅ ΡΡΠ΅ΠΌΡ Π²ΠΈΠ΄ΠΆΠΈΡΠ°ΠΌΠΈ β Π΄Π»Ρ
ΠΎΠΊΠ½Π°, ΡΠ°Π±Π»ΠΈΡΡ ΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² GUI*/
int i;
/* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΡΠ±ΠΎΠΉ GTK-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */
gtk_init (&argc, &argv);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° */
gtk_window_set_title (GTK_WINDOW(window), "Resolver");
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Π·Π°ΠΊΡΡΡΠΈΡ ΠΎΠΊΠ½Π°.
Π‘ΠΈΠ³Π½Π°Π» - delete_event. ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ delete_event(),
ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠΈΡΠ°Π½Π° Π²ΡΡΠ΅ */
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
GTK_SIGNAL_FUNC(delete_event), NULL);
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ°ΠΌΠΊΡ ΠΎΠΊΠ½Π° */
gtk_container_set_border_width(GTK_CONTAINER (window), 20);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ 3x3 */
table = gtk_table_new (3, 3, TRUE);
/* ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ! */
gtk_container_add(GTK_CONTAINER (window), table);
/* Π ΠΈΡΡΠ΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΠΈ, ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΈΡ Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ
ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π°Π΄ΠΏΠΈΡΠΈ */
label = gtk_label_new("Domain: ");
/* Π ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ ΡΡΠ΅Π΅ΠΊ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π»ΠΈΡΡΠΈΠ½Π³Π° */