HiI am trying to create a custom widget based on gtk textview (the gtk#bindings for C#). The purpose is to enable writing my local language Urdu intextview instead of English. I am unable to find how can I hack the keyboardinput before it appears on screen (so I change the key values like a to اand b to ب etc). I am a beginner so plz suggest me it this regards.Obviously I want to do it in c# (mono has Gdk.Keyboard, Gdk.Keymap and someother such classes, but I am unable to figure out a way to get the pressedkey's value and change it before it is passed to textview buffer). At lasthere is the example my friend done in system.windows.forms textbox.__________________________________________________________________using System;using System.Drawing;using System.Drawing.Design;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Windows.Forms.Design; namespace UrduCtrl{ enum KeyboardStates { kbNormal=0, kbShift=1, kbCtrl=2, kbAltGr=3 } public class UrduTextPropertyEditor: UITypeEditor {// public override object EditValue( // System.ComponentModel.ITypeDescriptorContext context, // System.IServiceProvider provider, object value) // { // IWindowsFormsEditorService frmsvr =(IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));// if(frmsvr == null)// return null;//// UrduTextPropertyEditorDlg dlg= new UrduTextPropertyEditorDlg();// dlg.EditedText = (string) value;//// //dlg.ShowDialog();// frmsvr.ShowDialog(dlg);//// return (string) dlg.EditedText;// } // public override object EditValue(ITypeDescriptorContext context,IServiceProvider provider, object value)// {// if (context!=null && provider!=null)// {// IWindowsFormsEditorService edSrv=(IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));// if (edSrv!=null)// {// UrduTextPropertyEditorDlg dialog= new UrduTextPropertyEditorDlg();// if (value is String)// dialog.EditedText= (string)value; // if (edSrv.ShowDialog(dialog)==System.Windows.Forms.DialogResult.OK)// value= dialog.EditedText;// dialog.Dispose();// dialog= null;// }// }// return value;// } public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context) { // We will use a window for property editing. return UITypeEditorEditStyle.Modal; } public override bool GetPaintValueSupported( System.ComponentModel.ITypeDescriptorContext context) { // No special thumbnail will be shown for the grid. return false; } } /// <summary> /// Summary description for Class1. /// </summary> [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand,Name="FullTrust")] public class UrduTextBox: System.Windows.Forms.TextBox { private int WM_CHAR = 0x102; private int WM_KEYDOWN = 0x100; private int WM_KEYUP = 0x101; private bool m_bIsUrdu; private KeyboardStates kbState; private Hashtable UrduPhonetic; private char charSingleQuote= Convert.ToChar(39); public UrduTextBox() { this.Font = new System.Drawing.Font("Urdu Naskh Asiatype", 12F,System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point,((System.Byte)(178))); this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; //this.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.m_bIsUrdu= true; kbState= KeyboardStates.kbNormal; UrduPhonetic= new Hashtable(); UrduPhonetic['a']=new Key(0x0627, 0x0622, 0x0623); UrduPhonetic['b']=new Key(0x0628, 0x0628); UrduPhonetic['c']=new Key(0x0686, 0x062B); UrduPhonetic['d']=new Key(0x062F, 0x0688); UrduPhonetic['e']=new Key(0x0639, 0x0651); UrduPhonetic['f']=new Key(0x0641, 0x64D); UrduPhonetic['g']=new Key(0x06AF, 0x063A); UrduPhonetic['h']=new Key(0x06BE, 0x062D); UrduPhonetic['i']=new Key(0x06CC, 0x0670); UrduPhonetic['j']=new Key(0x062C, 0x0636); UrduPhonetic['k']=new Key(0x06A9, 0x062E); UrduPhonetic['l']=new Key(0x0644, 0x0628); UrduPhonetic['m']=new Key(0x0645, 0x64B); UrduPhonetic['n']=new Key(0x0646, 0x06BA); UrduPhonetic['o']=new Key(0x06C1, 0x06C3); UrduPhonetic['p']=new Key(0x067E, 0x064F); UrduPhonetic['q']=new Key(0x0642); UrduPhonetic['r']=new Key(0x0631, 0x0691); UrduPhonetic['s']=new Key(0x0633 , 0x0635); UrduPhonetic['t']=new Key(0x062A , 0x0679); UrduPhonetic['u']=new Key(0x0626 , 0x0621); UrduPhonetic['v']=new Key(0x0637, 0x0638); UrduPhonetic['w']=new Key(0x0648, 0x0624); UrduPhonetic['x']=new Key(0x0634, 0x0698); UrduPhonetic['y']=new Key(0x06D2, 0x06D2); UrduPhonetic['z']=new Key(0x0632, 0x0630); UrduPhonetic['0']=new Key(0x0030, Convert.ToInt16(')')); UrduPhonetic['1']=new Key(0x0031, Convert.ToInt16('!')); UrduPhonetic['2']=new Key(0x0032, Convert.ToInt16('@')); UrduPhonetic['3']=new Key(0x0033, Convert.ToInt16('#')); UrduPhonetic['4']=new Key(0x0034, Convert.ToInt16('$')); UrduPhonetic['5']=new Key(0x0035, Convert.ToInt16('%')); UrduPhonetic['6']=new Key(0x0036, Convert.ToInt16('^')); UrduPhonetic['7']=new Key(0x0037, Convert.ToInt16('&')); UrduPhonetic['8']=new Key(0x0038, Convert.ToInt16('*')); UrduPhonetic['9']=new Key(0x0039, Convert.ToInt16('(')); UrduPhonetic['=']=new Key(0x03D, 0x02B); UrduPhonetic['-']=new Key(0x002D, 0x0640); UrduPhonetic[',']=new Key(0x060C, 0x064E); UrduPhonetic['.']=new Key(0x06D4, 0x0650); UrduPhonetic['/']=new Key(0x002F, 0x061F); UrduPhonetic['\\']=new Key(0x0674); UrduPhonetic[';']=new Key(0x061B, 58); UrduPhonetic['[']=new Key(0x64C); UrduPhonetic[']']=new Key(0x0652); UrduPhonetic[charSingleQuote]=new Key(0x2018, 0x201C); UrduPhonetic['~']=new Key(0x2019, 0x201D); UrduPhonetic[' ']=new Key(32, 0x200C); UrduPhonetic['<']=new Key(0x064E); } protected override void WndProc(ref Message m) { if (m.Msg == WM_CHAR) { if(kbState== KeyboardStates.kbCtrl) { if(m.WParam == (IntPtr) 32) { this.m_bIsUrdu= !(this.m_bIsUrdu); m.WParam= (IntPtr) 0; base.WndProc(ref m); return; } } if(m_bIsUrdu) { //MessageBox.Show("Test"); char strChar= (char) m.WParam; strChar= Char.ToLower(strChar); if (kbState== KeyboardStates.kbShift) { if (UrduPhonetic.ContainsKey(strChar)) { m.WParam= (IntPtr) ((UrduCtrl.Key) UrduPhonetic[strChar]).shift; } } else if (kbState== KeyboardStates.kbAltGr) { if (UrduPhonetic.ContainsKey(strChar)) { m.WParam= (IntPtr) ((UrduCtrl.Key) UrduPhonetic[strChar]).altgr; } } else if (kbState== KeyboardStates.kbNormal) { if (UrduPhonetic.ContainsKey(strChar)) { m.WParam= (IntPtr) ((UrduCtrl.Key) UrduPhonetic[strChar]).normal; } } } } else if (m.Msg == WM_KEYDOWN) { if((Control.ModifierKeys & Keys.Shift) == Keys.Shift ) { this.kbState= KeyboardStates.kbShift; } else if(((Control.ModifierKeys & Keys.Control) == Keys.Control) &&(((Control.ModifierKeys & Keys.Alt) == Keys.Alt))) { this.kbState= KeyboardStates.kbAltGr; char strChar= (char) m.WParam; strChar= Char.ToLower(strChar); } else if((Control.ModifierKeys & Keys.Control) == Keys.Control ) { this.kbState= KeyboardStates.kbCtrl; } } else if (m.Msg == WM_KEYUP) { if(kbState == KeyboardStates.kbAltGr) { if(!(((Control.ModifierKeys & Keys.Control) == Keys.Control) &&(((Control.ModifierKeys & Keys.Alt) == Keys.Alt)))) { this.kbState= KeyboardStates.kbNormal; } } else if(kbState == KeyboardStates.kbCtrl) { if((Control.ModifierKeys & Keys.Control) != Keys.Control ) { this.kbState= KeyboardStates.kbNormal; } } else if(kbState == KeyboardStates.kbShift) { if((Control.ModifierKeys & Keys.Shift) != Keys.Shift) { this.kbState= KeyboardStates.kbNormal; } } } base.WndProc(ref m); } [Category("Appearance"), Description("Text property for Urdu edit control."), Editor(typeof(UrduTextPropertyEditor), typeof(UITypeEditor))] public override string Text { get { return(base.Text); } set { base.Text = value; this.Invalidate(); } } }}________________________________________________________ Regards-- View this message in context: http://www.nabble.com/Catching-keyboard-meessages-input-to-a-GTK%28sharp%29-textview-widget-tp18436239p18436239.htmlSent from the Gtk+ - General mailing list archive at Nabble.com. _______________________________________________gtk-list mailing listgtk-list@xxxxxxxxxxxxx://mail.gnome.org/mailman/listinfo/gtk-list