דפדפן GNOME – ממשק חדיש ותמיכה בריבוי תהלכים

ערב טוב.

אחד היישומים החשובים ביותר עבורי ב־GNOME זה דפדפן GNOME, הנקרא Web או Epiphany.

בעבר הייתי משתמש ב־Firefox, עד שראיתי את דפדפן GNOME.

זה האחרון ללא ספק מהיר בהרבה מ־Firefox, צורך הרבה פחות זיכרון ובעיקר מגיע עם ממשק נקי המנצל כמעט את כל המסך להצגת התוכן. כמו כן,  הוא לא עוד דפדפן מנופח שעושה אלף ואחד דברים שאני לא צריך, דברים שבעיקר מכבידים על הגלישה.

במחזור הפיתוח האחרון נוספו מספר תכונות, כאשר כתבתי בעצמי חלק מהן.

תמיכה בריבוי תהליכים

Carlos Garcia Campos, המתחזק הרשמי של WebKitGTK+‎, יחד עם עוד אנשים רבים, הוסיף API ל־WebKitGTK+‎ המאפשר ריבוי תהליכים, ובהמשך השתמש ב־API זה בדפדפן GNOME.

כיוון שלא הכל עובד חלק עם ריבוי תהליכים, כרגע כבררת מחדל זה מושבת, אך ניתן לאפשר באמצעות gsettings:
gsettings set org.gnome.Epiphany process-model 'one-secondary-process-per-web-view'

בהפעלת דפדפן GNOME עם אפשרות זו, כל מופע של WebKitWebView (נוצר אחד כזה לכל לשונית) פועל על גבי תהליך WebKitWebProcess נפרד.

מסיבה זו, אם תתרחש קריסה בלשונית זו או אחרת, שאר הלשוניות תמשכנה לפעול.

יש לציין שכבר ב־3.8 הטיפול ב־ WebKit הופרד לתהליך נפרד, מה שאפשר לממשק להמשיך לפעול גם כשלשוניות קורסות (אז כל הלשוניות יחד). יחד עם זה התוספים הופרדו גם הם לתהליך נפרד, מה שאפר להפעיל תהליך זה עם GTK+ 2 (לא ניתן להריץ באותו תהליך גם את GTK+ 2 וגם את GTK+ 3), כך שתוסף ה־Flash עובד מחוץ לקופסה, ללא בעיות.

רק כדי לסבר את העין:

$ ps -u | grep WebKit
yosefor 6140 0.1 0.7 4324872 57912 tty2 Sl 01:23 0:01 /usr/lib/webkitgtk/WebKitNetworkProcess 15
yosefor 6151 0.0 0.7 2509152 59176 tty2 Sl 01:23 0:00 /usr/lib/webkitgtk/WebKitWebProcess 21
yosefor 6180 0.2 0.6 2569032 55340 tty2 Sl 01:23 0:02 /usr/lib/webkitgtk/WebKitWebProcess 27
yosefor 6260 0.3 0.7 2509948 60456 tty2 Sl 01:25 0:02 /usr/lib/webkitgtk/WebKitWebProcess 33
yosefor 13083 1.1 0.8 2582084 65472 tty2 Sl 01:34 0:01 /usr/lib/webkitgtk/WebKitWebProcess 36
yosefor 13183 7.5 0.8 2579408 66264 tty2 Sl 01:36 0:01 /usr/lib/webkitgtk/WebKitWebProcess 33
yosefor 13213 3.2 0.8 2581292 67432 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 39
yosefor 13237 3.1 0.8 2515808 65388 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 43
yosefor 13262 3.2 0.8 2581332 65364 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 44
yosefor 13284 3.5 0.8 2581328 69484 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 50
yosefor 13308 3.2 0.8 2581352 65404 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 42
yosefor 13331 3.5 0.8 2581340 67400 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 55
yosefor 13354 3.4 0.8 2581308 67516 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 54
yosefor 13379 3.6 0.8 2581304 65404 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 60
yosefor 13405 4.0 0.8 2515780 67372 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 63
yosefor 13430 4.3 0.8 2581304 67520 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 66
yosefor 13458 4.6 0.8 2507596 67416 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 70
yosefor 13480 4.5 0.8 2515844 65408 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 77
yosefor 13502 2.6 0.5 2559848 42892 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 69
yosefor 13525 2.7 0.5 2557976 43376 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 76
yosefor 13556 2.7 0.5 2492440 41360 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 81
yosefor 13579 8.0 0.8 2581288 65452 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 84
yosefor 13606 9.1 0.8 2581248 67384 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 88
yosefor 13630 8.8 0.7 2581376 63360 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 89
yosefor 13652 11.2 0.7 2581376 63436 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 87
yosefor 13677 14.0 0.7 2581332 63328 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 97
yosefor 13703 18.6 0.7 2581304 63452 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 96
yosefor 13714 19.0 0.7 2581292 63312 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 102
yosefor 13751 18.0 0.7 2581368 63348 tty2 Sl 01:36 0:00 /usr/lib/webkitgtk/WebKitWebProcess 108
yosefor 13776 0.0 0.0 12724 1128 pts/2 S+ 01:36 0:00 grep --color=auto WebKit

נראה שפתחתי יותר מדי לשוניות ;-)

שילוב כותרת הדף ותיבת הכתובות

עד עכשיו מרבית השינויים שהכנסתי ל־GNOME היו שינויים קטנים ופשוטים, שינויים קטנים בממשק. לכל היותר כמה עשרות שורות קוד.

היום הכנסתי ל־Git את הקוד ה„אמתי” הראשון שלי. כלומר, קוד פחות פשוט ואפילו קצת מורכב, שעושה יותר מהוספת כפתור, תיקון יישור של כפתור או תיקן ריווח ב־RTL.

הבעיה

כאשר לשונית אחת בלבד פתוחה, או כאשר הרבה לשוניות פתוחות, קשה לראות את כותרת הדף, על אף שלעתים יש בה מידע שימושי (מס׳ הודעות חדשות, שם של ערך בוויקיפדיה וכן הלאה).

הרעיון

שורת הכותרת מכילה כפתורי ניווט ותיבה המכילה את כתובת הדף (להלן תיבת הכתובות). הרעיון הוא להחליף תיבה זו בכותרת הדף, כאשר תת־כותרת מכילה את כתובת הדף.

בפועל

כאשר דף מתחיל להיטען, תיבת הכתובות מוצגת. ברגע שמתקבלת כותרת מהדף, תיבת הכתובות מוסתרת ובמקומה מוצגת כותרת הדף. אם תיבת הכתובות ממוקדת על ידי המשתמש או מתקבלת כותרת ריקה, תיבת הכתובות תמשיך להופיע.

בלחיצה על כותרת הדף (כאשר מוצגת), היא מוסתרת ובמקומה מופיעה תיבת הכתובות. מיקוד חוזר בתוכן הדף יציג שוב את כותרת הדף במקום שורת הכתובות.

יש הנפשה במעבר בין הצגת תיבת הכתובות והצגת כותרת הדף (ולהפך).

בעיה קטנה

אם בלחיצה על כותרת הדף היא מוסתרת ובמקומה מוצגת תיבת הכתובת, הרי לא ניתן להגדיל את החלון או להקטין אותו בלחיצה כפולה, כמו גם לגרור את החלון מהכותרת.

הפתרון שלי הוא למדוד את הזמן לאחר לחיצה. ישנו זמן המוגדר על ידי המערכת כזמן המרבי המפריד בין שתי לחיצות ומגדיר אותן כלחיצה כפולה. אם לאחר רבע מהזמן הזה לא התקבלה לחיצה נוספת, רק אז תוצג תיבת הכתובות.

כיוון שיש באפשרותי להעלות קבצים בגודל של מ״ב אחד בלבד לכל היותר, נבצר ממני להטמיע כאן הסרטה, אלא לקשר לקובץ ‎ .webm בלבד, לכן גם אצרף שני צילומי מסך:

עריכה: תודות לעמיעד, להלן ההסרטה מוטמעת:

וכאן שני צילומי מסך:

כותרת מוצגת
תיבת הכתובות מוצגת
את הקוד אני כתבתי. ביקורת על הקוד והרבה עזרה קיבלתי מ־Carlos Garcia Campos ומ־William Jon McCann. הסקירה התבצעה בבאג מס׳ 711408, כאשר ההגשה ב־Git נמצאת כאן.
מסקירת הקוד למדתי הרבה. לפני זה בעיקר הייתי קורא קוד העושה שימוש ב־GObject. רק עכשיו כתבתי בעצמי קוד כזה, קוד משמעותי, אם כי גם הוא לא גדול במיוחד, אך גדול דיו כדי להבין היטב איך המערכת הזו פועלת.
בברכה,
יוסף אור

7 תגובות בנושא “דפדפן GNOME – ממשק חדיש ותמיכה בריבוי תהלכים”

  1. אני נהנה לעקוב אחרי הבלוג וההתקדמות שלך
    אני חושב שאתה אחד מהאנשים שרואים אותם תורמים לקהילה ותודה על כך (למרות שאני משתמש KDE)

  2. אהבתי מאוד גם את הרעיון וגם את הביצוע. כל הכבוד!
    מעניין כמה זמן ייקח לגוגל, מוזילה ושאר ה"גדולים" לגנוב את הרעיון שלך…

    1. אני לא בטוח שיאהבו את הרעיון שלי. בטח בגלל שהוא לכאורה מסתיר פריט חשוב מהממשק (שורת הכתובות, כפתור הרענון והסמל של האתר).

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *